// Digital "Thuyết minh đề tài nghiên cứu ứng dụng" (Mẫu III.06-TM.ĐTUD, 09/2024/TT-BKHCN).
// Schema + form-state helpers, ported from the design artifact. The renderer
// (ProposalFormFields.tsx) restyles these definitions with the shared design system.

export type FieldType =
  | 'text'
  | 'textarea'
  | 'number'
  | 'radio'
  | 'checkboxGroup'
  | 'tel'
  | 'email'
  | 'date';

export interface FieldDef {
  key: string;
  label: string;
  type: FieldType;
  required?: boolean;
  placeholder?: string;
  hint?: string;
  default?: string;
  inline?: boolean;
  min?: number;
  options?: { value: string; label: string }[];
  showIf?: { field: string; equals?: string; contains?: string };
}

export interface SubsectionDef {
  id: string;
  title: string;
  keyPrefix: string;
  fields: FieldDef[];
}

export interface ColumnDef {
  key: string;
  label: string;
  type: FieldType;
  default?: string;
}

export interface RepeatableDef {
  key: string;
  title: string;
  minRows: number;
  addLabel: string;
  rowLabel: string;
  columns: ColumnDef[];
  seedRows?: Record<string, string>[];
}

export interface SectionDef {
  id: string;
  title: string;
  fields: FieldDef[];
  subsections?: SubsectionDef[];
  repeatables?: RepeatableDef[];
}

export interface ProposalSchema {
  meta: { formCode: string; circular: string; title: string; subtitleField: string; language: string };
  topFields: FieldDef[];
  sections: SectionDef[];
  signature: Record<string, FieldDef>;
}

export type RepeatableRow = Record<string, string>;
export type FormValues = Record<string, string | string[] | RepeatableRow[]>;

export const schema: ProposalSchema = {
  meta: {
    formCode: 'Mẫu III.06-TM.ĐTUD',
    circular: '09/2024/TT-BKHCN',
    title: 'THUYẾT MINH ĐỀ TÀI NGHIÊN CỨU ỨNG DỤNG VÀ PHÁT TRIỂN CÔNG NGHỆ',
    subtitleField: 'capDeTai',
    language: 'vi',
  },
  topFields: [
    {
      key: 'capDeTai',
      label: 'Cấp đề tài',
      type: 'text',
      placeholder: '{{capDeTai}}',
      hint: 'Điền vào chỗ trống của tiêu đề: "... CẤP ..." (ví dụ: cấp Thành phố, cấp Cơ sở).',
    },
  ],
  sections: [
    {
      id: 'I',
      title: 'THÔNG TIN CHUNG VỀ ĐỀ TÀI',
      fields: [
        { key: 'tenDeTai', label: '1. Tên đề tài', type: 'textarea', required: true, placeholder: '{{tenDeTai}}' },
        { key: 'maSo', label: 'Mã số', type: 'text', placeholder: '{{maSo}}', hint: 'Được cấp khi hồ sơ trúng tuyển — thường để trống khi nộp.' },
        { key: 'thoiGianThucHienThang', label: '2. Thời gian thực hiện (tháng)', type: 'number', required: true, placeholder: '{{thoiGianThucHienThang}}', min: 1 },
        { key: 'thoiGianTuThang', label: 'Từ tháng', type: 'text', placeholder: '{{thoiGianTuThang}}', inline: true },
        { key: 'thoiGianTuNam', label: 'Năm', type: 'text', placeholder: '{{thoiGianTuNam}}', inline: true },
        { key: 'thoiGianDenThang', label: 'Đến tháng', type: 'text', placeholder: '{{thoiGianDenThang}}', inline: true },
        { key: 'thoiGianDenNam', label: 'Năm', type: 'text', placeholder: '{{thoiGianDenNam}}', inline: true },
        { key: 'capQuanLy', label: '3. Cấp quản lý', type: 'text', default: 'Sở Khoa học Công nghệ - Tp Hồ Chí Minh', placeholder: '{{capQuanLy}}' },
        { key: 'tongKinhPhi', label: '4. Tổng kinh phí thực hiện (triệu đồng)', type: 'number', placeholder: '{{tongKinhPhi}}', min: 0 },
        { key: 'kinhPhiNganSach', label: 'Từ ngân sách nhà nước (triệu đồng)', type: 'number', placeholder: '{{kinhPhiNganSach}}', inline: true, min: 0 },
        { key: 'kinhPhiNgoaiNganSach', label: 'Từ nguồn ngoài ngân sách (triệu đồng)', type: 'number', placeholder: '{{kinhPhiNgoaiNganSach}}', inline: true, min: 0 },
        {
          key: 'phuongThucKhoan',
          label: '5. Đề nghị phương thức khoán chi',
          type: 'radio',
          placeholder: '{{phuongThucKhoan}}',
          options: [
            { value: 'cuoiCung', label: 'Khoán đến sản phẩm cuối cùng' },
            { value: 'tungPhan', label: 'Khoán từng phần' },
          ],
        },
        { key: 'kinhPhiKhoan', label: 'Kinh phí khoán (triệu đồng)', type: 'number', placeholder: '{{kinhPhiKhoan}}', inline: true, showIf: { field: 'phuongThucKhoan', equals: 'tungPhan' } },
        { key: 'kinhPhiKhongKhoan', label: 'Kinh phí không khoán (triệu đồng)', type: 'number', placeholder: '{{kinhPhiKhongKhoan}}', inline: true, showIf: { field: 'phuongThucKhoan', equals: 'tungPhan' } },
        { key: 'loaiHinhDeTai', label: '6. Loại hình đề tài', type: 'text', placeholder: '{{loaiHinhDeTai}}' },
        {
          key: 'linhVuc',
          label: '7. Lĩnh vực',
          type: 'checkboxGroup',
          placeholder: '{{linhVuc}}',
          options: [
            { value: 'tuNhien', label: 'Tự nhiên' },
            { value: 'nongNghiep', label: 'Nông nghiệp' },
            { value: 'kyThuatCongNghe', label: 'Kỹ thuật và công nghệ' },
            { value: 'yDuoc', label: 'Y, dược' },
            { value: 'khac', label: 'Lĩnh vực khác' },
          ],
        },
        { key: 'linhVucKhac', label: 'Ghi rõ lĩnh vực khác', type: 'text', placeholder: '{{linhVucKhac}}', showIf: { field: 'linhVuc', contains: 'khac' } },
      ],
      subsections: [
        {
          id: '8',
          title: '8. Chủ nhiệm đề tài',
          keyPrefix: 'chuNhiem',
          fields: [
            { key: 'hoTen', label: 'Họ và tên', type: 'text', required: true },
            { key: 'soDinhDanh', label: 'Số định danh cá nhân', type: 'text' },
            { key: 'ngaySinh', label: 'Ngày, tháng, năm sinh', type: 'text' },
            { key: 'gioiTinh', label: 'Giới tính', type: 'radio', options: [{ value: 'nam', label: 'Nam' }, { value: 'nu', label: 'Nữ' }] },
            { key: 'hocVi', label: 'Học hàm, học vị / Trình độ chuyên môn', type: 'text' },
            { key: 'chucDanhNgheNghiep', label: 'Chức danh nghề nghiệp', type: 'text' },
            { key: 'chucVu', label: 'Chức vụ', type: 'text' },
            { key: 'dienThoai', label: 'Điện thoại', type: 'tel' },
            { key: 'email', label: 'E-mail', type: 'email' },
            { key: 'tenToChuc', label: 'Tên tổ chức đang công tác', type: 'text' },
            { key: 'diaChiToChuc', label: 'Địa chỉ tổ chức', type: 'text' },
          ],
        },
        {
          id: '9',
          title: '9. Thư ký khoa học của đề tài',
          keyPrefix: 'thuKy',
          fields: [
            { key: 'hoTen', label: 'Họ và tên', type: 'text' },
            { key: 'soDinhDanh', label: 'Số định danh cá nhân', type: 'text' },
            { key: 'ngaySinh', label: 'Ngày, tháng, năm sinh', type: 'text' },
            { key: 'gioiTinh', label: 'Giới tính', type: 'radio', options: [{ value: 'nam', label: 'Nam' }, { value: 'nu', label: 'Nữ' }] },
            { key: 'hocVi', label: 'Học hàm, học vị / Trình độ chuyên môn', type: 'text' },
            { key: 'chucDanhNgheNghiep', label: 'Chức danh nghề nghiệp', type: 'text' },
            { key: 'chucVu', label: 'Chức vụ', type: 'text' },
            { key: 'dienThoai', label: 'Điện thoại', type: 'tel' },
            { key: 'email', label: 'E-mail', type: 'email' },
            { key: 'tenToChuc', label: 'Tên tổ chức đang công tác', type: 'text' },
            { key: 'diaChiToChuc', label: 'Địa chỉ tổ chức', type: 'text' },
          ],
        },
        {
          id: '10',
          title: '10. Tổ chức chủ trì đề tài',
          keyPrefix: 'toChucChuTri',
          fields: [
            { key: 'tenToChuc', label: 'Tên tổ chức chủ trì đề tài', type: 'text', required: true },
            { key: 'maSoToChuc', label: 'Mã số tổ chức', type: 'text' },
            { key: 'dienThoai', label: 'Điện thoại', type: 'tel' },
            { key: 'website', label: 'Website', type: 'text' },
            { key: 'diaChi', label: 'Địa chỉ', type: 'text' },
            { key: 'nguoiDungDau', label: 'Họ và tên người đứng đầu', type: 'text' },
            { key: 'soTaiKhoan', label: 'Số tài khoản', type: 'text' },
            { key: 'khoBac', label: 'Tại kho bạc Nhà nước', type: 'text' },
            { key: 'nganHang', label: 'Ngân hàng', type: 'text' },
          ],
        },
      ],
      repeatables: [
        {
          key: 'toChucPhoiHop',
          title: '11. Các tổ chức phối hợp chính thực hiện đề tài (nếu có)',
          minRows: 0,
          addLabel: 'Thêm tổ chức phối hợp',
          rowLabel: 'Tổ chức',
          columns: [
            { key: 'tenToChuc', label: 'Tên tổ chức', type: 'text' },
            { key: 'maSoToChuc', label: 'Mã số tổ chức', type: 'text' },
            { key: 'dienThoai', label: 'Điện thoại', type: 'tel' },
            { key: 'diaChi', label: 'Địa chỉ', type: 'text' },
            { key: 'nguoiDungDau', label: 'Người đứng đầu', type: 'text' },
            { key: 'coQuanChuQuan', label: 'Cơ quan chủ quản', type: 'text' },
          ],
        },
        {
          key: 'thanhVienThucHien',
          title: '12. Thành viên thực hiện đề tài',
          minRows: 1,
          addLabel: 'Thêm thành viên',
          rowLabel: 'Thành viên',
          columns: [
            { key: 'hoTenHocVi', label: 'Họ và tên, học hàm, học vị', type: 'text' },
            { key: 'chucDanh', label: 'Chức danh thực hiện đề tài', type: 'text', default: 'Thành viên chính' },
            { key: 'toChucCongTac', label: 'Tổ chức công tác', type: 'text' },
          ],
        },
      ],
    },
    {
      id: 'II',
      title: 'MỤC TIÊU, NỘI DUNG VÀ PHƯƠNG ÁN TỔ CHỨC THỰC HIỆN ĐỀ TÀI',
      fields: [
        { key: 'mucTieuTongQuat', label: '13. Mục tiêu tổng quát', type: 'textarea', required: true, placeholder: '{{mucTieuTongQuat}}' },
        { key: 'mucTieuCuThe', label: 'Mục tiêu cụ thể', type: 'textarea', placeholder: '{{mucTieuCuThe}}', hint: 'Mỗi mục tiêu trên một dòng.' },
        {
          key: 'tinhTrangDeTai',
          label: '14. Tình trạng của đề tài',
          type: 'radio',
          placeholder: '{{tinhTrangDeTai}}',
          options: [
            { value: 'moi', label: 'Mới' },
            { value: 'keTiepNhom', label: 'Kế tiếp hướng nghiên cứu của chính nhóm tác giả' },
            { value: 'keTiepNguoiKhac', label: 'Kế tiếp nghiên cứu của người khác' },
          ],
        },
        { key: 'tongQuanNgoaiNuoc', label: '15.1 Tổng quan tình hình nghiên cứu — Ngoài nước', type: 'textarea', placeholder: '{{tongQuanNgoaiNuoc}}' },
        { key: 'tongQuanTrongNuoc', label: '15.1 Tổng quan tình hình nghiên cứu — Trong nước', type: 'textarea', placeholder: '{{tongQuanTrongNuoc}}' },
        { key: 'luanGiaiNoiDung', label: '15.2 Luận giải về những nội dung cần nghiên cứu', type: 'textarea', placeholder: '{{luanGiaiNoiDung}}' },
        { key: 'danhMucCongTrinh', label: '16. Danh mục các công trình, tài liệu đã trích dẫn', type: 'textarea', placeholder: '{{danhMucCongTrinh}}', hint: 'Tên công trình, tác giả, nơi và năm công bố — mỗi tài liệu một dòng.' },
        { key: 'phuongAnPhoiHopTrongNuoc', label: '18. Phương án phối hợp với các tổ chức trong nước', type: 'textarea', placeholder: '{{phuongAnPhoiHopTrongNuoc}}' },
        { key: 'phuongAnHopTacQuocTe', label: '19. Phương án hợp tác quốc tế (nếu có)', type: 'textarea', placeholder: '{{phuongAnHopTacQuocTe}}' },
      ],
      repeatables: [
        {
          key: 'noiDungNghienCuu',
          title: '17. Nội dung nghiên cứu khoa học và triển khai thực nghiệm',
          minRows: 1,
          addLabel: 'Thêm nội dung',
          rowLabel: 'Nội dung',
          columns: [
            { key: 'tenNoiDung', label: 'Tên nội dung', type: 'text' },
            { key: 'moTa', label: 'Mô tả / cách tiếp cận', type: 'textarea' },
            { key: 'congViec', label: 'Các công việc (mỗi công việc một dòng)', type: 'textarea' },
          ],
        },
        {
          key: 'thueChuyenGiaTrongNuoc',
          title: '20.1 Thuê chuyên gia trong nước (nếu có)',
          minRows: 0,
          addLabel: 'Thêm chuyên gia trong nước',
          rowLabel: 'Chuyên gia',
          columns: [
            { key: 'hoTenHocVi', label: 'Họ và tên, học hàm, học vị', type: 'text' },
            { key: 'toChuc', label: 'Thuộc tổ chức', type: 'text' },
            { key: 'linhVucChuyenMon', label: 'Lĩnh vực chuyên môn', type: 'text' },
            { key: 'noiDungLyDo', label: 'Nội dung thực hiện và lý do cần thuê', type: 'textarea' },
            { key: 'thoiGianQuyDoi', label: 'Thời gian quy đổi (tháng)', type: 'number' },
          ],
        },
        {
          key: 'thueChuyenGiaNuocNgoai',
          title: '20.2 Thuê chuyên gia nước ngoài (nếu có)',
          minRows: 0,
          addLabel: 'Thêm chuyên gia nước ngoài',
          rowLabel: 'Chuyên gia',
          columns: [
            { key: 'hoTenHocVi', label: 'Họ và tên, học hàm, học vị', type: 'text' },
            { key: 'quocTich', label: 'Quốc tịch', type: 'text' },
            { key: 'toChuc', label: 'Thuộc tổ chức', type: 'text' },
            { key: 'linhVucChuyenMon', label: 'Lĩnh vực chuyên môn', type: 'text' },
            { key: 'noiDungLyDo', label: 'Nội dung thực hiện và lý do cần thuê', type: 'textarea' },
            { key: 'thoiGianQuyDoi', label: 'Thời gian quy đổi (tháng)', type: 'number' },
          ],
        },
        {
          key: 'tienDoThucHien',
          title: '21. Tiến độ thực hiện',
          minRows: 1,
          addLabel: 'Thêm mốc tiến độ',
          rowLabel: 'Mốc',
          columns: [
            { key: 'noiDungCongViec', label: 'Nội dung, công việc / mốc đánh giá', type: 'textarea' },
            { key: 'ketQua', label: 'Kết quả phải đạt', type: 'textarea' },
            { key: 'thoiGian', label: 'Thời gian (bắt đầu – kết thúc)', type: 'text' },
            { key: 'caNhanToChuc', label: 'Cá nhân, tổ chức chủ trì', type: 'text' },
            { key: 'kinhPhi', label: 'Dự kiến kinh phí (triệu đồng)', type: 'number' },
          ],
        },
      ],
    },
    {
      id: 'III',
      title: 'SẢN PHẨM KHOA HỌC VÀ CÔNG NGHỆ (KH&CN) CỦA ĐỀ TÀI',
      fields: [
        { key: 'trinhDoKhoaHoc', label: '22.2 Trình độ khoa học của sản phẩm (Dạng I & II) so với sản phẩm tương tự', type: 'textarea', placeholder: '{{trinhDoKhoaHoc}}' },
        { key: 'mucChatLuong', label: '22.3 Mức chất lượng sản phẩm (Dạng III) so với sản phẩm tương tự', type: 'textarea', placeholder: '{{mucChatLuong}}' },
        { key: 'khaNangThiTruong', label: '23.1 Khả năng về thị trường', type: 'textarea', placeholder: '{{khaNangThiTruong}}' },
        { key: 'khaNangUngDung', label: '23.2 Khả năng ứng dụng vào sản xuất kinh doanh', type: 'textarea', placeholder: '{{khaNangUngDung}}' },
        { key: 'khaNangLienDoanh', label: '23.3 Khả năng liên doanh liên kết với doanh nghiệp', type: 'textarea', placeholder: '{{khaNangLienDoanh}}' },
        { key: 'phuongThucChuyenGiao', label: '23.4 Mô tả phương thức chuyển giao', type: 'textarea', placeholder: '{{phuongThucChuyenGiao}}' },
        { key: 'phamViDiaChiUngDung', label: '24. Phạm vi và địa chỉ (dự kiến) ứng dụng kết quả', type: 'textarea', placeholder: '{{phamViDiaChiUngDung}}' },
        { key: 'tacDongKHCN', label: '25.1 Tác động đối với lĩnh vực KH&CN có liên quan', type: 'textarea', placeholder: '{{tacDongKHCN}}' },
        { key: 'tacDongToChuc', label: '25.2 Tác động đối với tổ chức chủ trì và cơ sở ứng dụng', type: 'textarea', placeholder: '{{tacDongToChuc}}' },
        { key: 'tacDongKinhTeXaHoi', label: '25.3 Tác động đối với kinh tế - xã hội và môi trường', type: 'textarea', placeholder: '{{tacDongKinhTeXaHoi}}' },
        { key: 'trangBiHienCo', label: '26.1.a Bố trí trong số thiết bị hiện có của tổ chức chủ trì', type: 'textarea', placeholder: '{{trangBiHienCo}}' },
        { key: 'dieuChuyenThietBi', label: '26.1.b Điều chuyển thiết bị máy móc (nếu có)', type: 'textarea', placeholder: '{{dieuChuyenThietBi}}' },
        { key: 'phuongAnXuLyTaiSan', label: '26.2 Đề xuất phương án xử lý tài sản', type: 'textarea', placeholder: '{{phuongAnXuLyTaiSan}}' },
      ],
      repeatables: [
        {
          key: 'sanPhamDangI',
          title: '22. Sản phẩm KH&CN — Dạng I: Công bố khoa học (bài báo, sách chuyên khảo…)',
          minRows: 0,
          addLabel: 'Thêm sản phẩm Dạng I',
          rowLabel: 'Sản phẩm',
          columns: [
            { key: 'tenSanPham', label: 'Tên sản phẩm', type: 'text' },
            { key: 'yeuCau', label: 'Yêu cầu chất lượng cần đạt', type: 'textarea' },
            { key: 'soLuong', label: 'Số lượng / dự kiến', type: 'text' },
          ],
        },
        {
          key: 'sanPhamDangII',
          title: '22. Sản phẩm KH&CN — Dạng II: Sản phẩm ứng dụng (phần mềm, quy trình, mô hình…)',
          minRows: 0,
          addLabel: 'Thêm sản phẩm Dạng II',
          rowLabel: 'Sản phẩm',
          columns: [
            { key: 'tenSanPham', label: 'Tên sản phẩm', type: 'text' },
            { key: 'chiTieu', label: 'Chỉ tiêu kinh tế - kỹ thuật', type: 'textarea' },
            { key: 'yeuCau', label: 'Yêu cầu chất lượng cần đạt', type: 'textarea' },
          ],
        },
        {
          key: 'sanPhamDangIII',
          title: '22. Sản phẩm KH&CN — Dạng III: Sản phẩm khác',
          minRows: 0,
          addLabel: 'Thêm sản phẩm Dạng III',
          rowLabel: 'Sản phẩm',
          columns: [
            { key: 'tenSanPham', label: 'Tên sản phẩm', type: 'text' },
            { key: 'yeuCau', label: 'Yêu cầu chất lượng cần đạt', type: 'textarea' },
          ],
        },
        {
          key: 'daoTaoSauDaiHoc',
          title: '22.1 Kết quả tham gia đào tạo sau đại học',
          minRows: 0,
          addLabel: 'Thêm dòng đào tạo',
          rowLabel: 'Dòng',
          columns: [
            { key: 'capDaoTao', label: 'Cấp đào tạo', type: 'text' },
            { key: 'soLuong', label: 'Số lượng', type: 'number' },
            { key: 'chuyenNganh', label: 'Chuyên ngành đào tạo', type: 'text' },
            { key: 'ghiChu', label: 'Ghi chú', type: 'text' },
          ],
        },
        {
          key: 'thueThietBi',
          title: '26.1.c Thuê thiết bị máy móc',
          minRows: 0,
          addLabel: 'Thêm thiết bị thuê',
          rowLabel: 'Thiết bị',
          columns: [
            { key: 'danhMucTaiSan', label: 'Danh mục tài sản', type: 'text' },
            { key: 'tinhNang', label: 'Tính năng, thông số kỹ thuật', type: 'textarea' },
            { key: 'thoiGianThue', label: 'Thời gian thuê', type: 'text' },
          ],
        },
        {
          key: 'muaSamMoi',
          title: '26.1.d Mua sắm mới thiết bị máy móc',
          minRows: 0,
          addLabel: 'Thêm thiết bị mua mới',
          rowLabel: 'Thiết bị',
          columns: [
            { key: 'danhMucTaiSan', label: 'Danh mục tài sản', type: 'text' },
            { key: 'tinhNang', label: 'Tính năng, thông số kỹ thuật', type: 'textarea' },
          ],
        },
      ],
    },
    {
      id: 'IV',
      title: 'NHU CẦU KINH PHÍ THỰC HIỆN ĐỀ TÀI VÀ NGUỒN KINH PHÍ',
      fields: [],
      repeatables: [
        {
          key: 'kinhPhiTheoKhoanChi',
          title: '27. Kinh phí thực hiện đề tài phân theo các khoản chi (triệu đồng)',
          minRows: 1,
          addLabel: 'Thêm nguồn kinh phí',
          rowLabel: 'Nguồn',
          seedRows: [
            { nguonKinhPhi: 'Tổng kinh phí' },
            { nguonKinhPhi: 'Ngân sách nhà nước — a. Khoán chi' },
            { nguonKinhPhi: 'Ngân sách nhà nước — b. Không khoán chi' },
            { nguonKinhPhi: 'Nguồn ngoài ngân sách nhà nước' },
          ],
          columns: [
            { key: 'nguonKinhPhi', label: 'Nguồn kinh phí', type: 'text' },
            { key: 'tongSo', label: 'Tổng số', type: 'number' },
            { key: 'chiThuLao', label: 'Chi thù lao + chuyên gia', type: 'number' },
            { key: 'nguyenVatLieu', label: 'Nguyên, vật liệu, năng lượng', type: 'number' },
            { key: 'thietBi', label: 'Thiết bị, máy móc', type: 'number' },
            { key: 'xayDung', label: 'Xây dựng, sửa chữa nhỏ', type: 'number' },
            { key: 'chiKhac', label: 'Chi khác', type: 'number' },
          ],
        },
        {
          key: 'duToanKinhPhi',
          title: 'Phụ lục — Dự toán kinh phí thực hiện đề tài (triệu đồng)',
          minRows: 0,
          addLabel: 'Thêm khoản chi',
          rowLabel: 'Khoản chi',
          seedRows: [
            { noiDungKhoanChi: 'Chi thù lao thực hiện đề tài' },
            { noiDungKhoanChi: 'Thuê chuyên gia (trong nước / nước ngoài)' },
            { noiDungKhoanChi: 'Nguyên, vật liệu, năng lượng' },
            { noiDungKhoanChi: 'Thiết bị, máy móc' },
            { noiDungKhoanChi: 'Xây dựng, sửa chữa nhỏ' },
            { noiDungKhoanChi: 'Chi khác' },
          ],
          columns: [
            { key: 'noiDungKhoanChi', label: 'Nội dung các khoản chi', type: 'text' },
            { key: 'tongKinhPhi', label: 'Tổng kinh phí', type: 'number' },
            { key: 'nsnnTongSo', label: 'NSNN — Tổng số', type: 'number' },
            { key: 'nsnnNam1', label: 'NSNN — Năm 1', type: 'number' },
            { key: 'nsnnNam2', label: 'NSNN — Năm 2', type: 'number' },
            { key: 'nsnnNam3', label: 'NSNN — Năm 3', type: 'number' },
            { key: 'ngoaiTongSo', label: 'Ngoài NSNN — Tổng số', type: 'number' },
          ],
        },
      ],
    },
  ],
  signature: {
    diaDiemNgay: { key: 'diaDiemNgay', label: 'Địa điểm, ngày tháng năm', type: 'text', placeholder: '{{diaDiemNgay}}' },
    kyChuNhiem: { key: 'kyChuNhiem', label: 'Chủ nhiệm đề tài (họ và tên)', type: 'text', placeholder: '{{kyChuNhiem}}' },
    kyToChucChuTri: { key: 'kyToChucChuTri', label: 'Tổ chức chủ trì (họ tên, đóng dấu)', type: 'text', placeholder: '{{kyToChucChuTri}}' },
    kyCoQuanPheDuyet: { key: 'kyCoQuanPheDuyet', label: 'Cơ quan/đơn vị có thẩm quyền phê duyệt', type: 'text', placeholder: '{{kyCoQuanPheDuyet}}' },
  },
};

export function emptyRow(cols: ColumnDef[]): RepeatableRow {
  const r: RepeatableRow = {};
  for (const c of cols) r[c.key] = c.default ?? '';
  return r;
}

export function buildInitial(): FormValues {
  const v: FormValues = {};
  const applyField = (f: FieldDef, k: string) => {
    v[k] = f.type === 'checkboxGroup' ? [] : f.default ?? '';
  };
  for (const f of schema.topFields) applyField(f, f.key);
  for (const s of schema.sections) {
    for (const f of s.fields) applyField(f, f.key);
    for (const sub of s.subsections ?? []) for (const f of sub.fields) applyField(f, sub.keyPrefix + '.' + f.key);
    for (const rep of s.repeatables ?? []) {
      if (rep.seedRows?.length) v[rep.key] = rep.seedRows.map((sd) => ({ ...emptyRow(rep.columns), ...sd }));
      else v[rep.key] = Array.from({ length: rep.minRows }, () => emptyRow(rep.columns));
    }
  }
  for (const k of Object.keys(schema.signature)) v[schema.signature[k].key] = '';
  return v;
}

export function shouldShow(field: FieldDef, values: FormValues): boolean {
  if (!field.showIf) return true;
  const cur = values[field.showIf.field];
  if (field.showIf.equals !== undefined) return cur === field.showIf.equals;
  if (field.showIf.contains !== undefined)
    return Array.isArray(cur) && (cur as string[]).includes(field.showIf.contains);
  return true;
}

export interface MissingField {
  key: string;
  label: string;
}

export function collectMissing(values: FormValues): MissingField[] {
  const miss: MissingField[] = [];
  const check = (f: FieldDef, k: string) => {
    if (!f.required || !shouldShow(f, values)) return;
    const val = values[k];
    const empty = Array.isArray(val) ? val.length === 0 : !String(val ?? '').trim();
    if (empty) miss.push({ key: k, label: f.label });
  };
  for (const f of schema.topFields) check(f, f.key);
  for (const s of schema.sections) {
    for (const f of s.fields) check(f, f.key);
    for (const sub of s.subsections ?? []) for (const f of sub.fields) check(f, sub.keyPrefix + '.' + f.key);
  }
  return miss;
}
