/**
 * Maps `ApplicationFormState.referenceMaterialHonesty` into `bieu_mau_sang_kien_template.json`
 * under `BẢN XÁC NHẬN TÀI LIỆU THAM KHẢO (2.2.2)` for be01 / DOCX preview.
 */
import emptyTemplate from './bieu_mau_sang_kien_template.json';
import {
  type ReferenceMaterialHonesty,
  ensureReferenceMaterialHonesty,
} from '@/components/applicant/initiativeFormTypes';

type OfficialDoc = typeof emptyTemplate;

const K_II = 'II. XÁC NHẬN VÀ CAM KẾT (☑ vào ô tương ứng)';
const K_II_1 = '1. Trung thực thông tin và minh chứng';
const K_II_2 = '2. Trách nhiệm pháp luật';
const K_II_3 = '3. Bổ sung hồ sơ khi được yêu cầu';

const TEXT_II_1 =
  'Tôi cam đoan các thông tin kê khai và minh chứng đính kèm đối với tài liệu tham khảo là trung thực, đúng sự thật và phù hợp với Quyết định xuất bản trong giai đoạn quy định (15/4/2025–15/4/2026).';
const TEXT_II_2 =
  'Tôi hoàn toàn chịu trách nhiệm trước pháp luật và trước nhà trường về tính hợp pháp của tài liệu và nội dung đăng ký.';
const TEXT_II_3 = 'Tôi đồng ý bổ sung hoặc chỉnh sửa hồ sơ khi được yêu cầu.';

const K_TEN_TL = 'Tên tài liệu tham khảo (theo Quyết định xuất bản)';

export function applyReferenceMaterialHonestyToOfficialDoc(
  doc: OfficialDoc,
  raw: ReferenceMaterialHonesty | null | undefined,
): void {
  const r = ensureReferenceMaterialHonesty(raw);
  const sec = doc['BẢN XÁC NHẬN TÀI LIỆU THAM KHẢO (2.2.2)'] as Record<string, unknown> | undefined;
  if (!sec || typeof sec !== 'object') return;

  const ngay = sec['Ngày ký'];
  if (ngay && typeof ngay === 'object') {
    const n = ngay as Record<string, string>;
    n['Ngày'] = String(r.ngay_ky.ngay ?? '');
    n['Tháng'] = String(r.ngay_ky.thang ?? '');
    n['Năm'] = String(r.ngay_ky.nam ?? '');
  }

  const i1 = sec['I. THÔNG TIN ĐĂNG KÝ'];
  if (i1 && typeof i1 === 'object') {
    const i = i1 as Record<string, unknown>;
    i['Tác giả đăng ký sáng kiến'] = r.tac_gia_dang_ky;
    i['CCCD/Hộ chiếu số'] = r.cccd;
    i['Đơn vị'] = r.don_vi;
    i[K_TEN_TL] = r.ten_tai_lieu;
    i['Năm xét công nhận sáng kiến'] = r.nam_xet;
  }

  const ii = sec[K_II];
  if (ii && typeof ii === 'object') {
    const section = ii as Record<string, unknown>;
    const b1 = section[K_II_1];
    if (b1 && typeof b1 === 'object') {
      (b1 as Record<string, boolean>)[TEXT_II_1] = Boolean(r.cam_ket.thong_tin_trung_thuc);
    }
    const b2 = section[K_II_2];
    if (b2 && typeof b2 === 'object') {
      (b2 as Record<string, boolean>)[TEXT_II_2] = Boolean(r.cam_ket.trach_nhiem_phap_luat);
    }
    const b3 = section[K_II_3];
    if (b3 && typeof b3 === 'object') {
      (b3 as Record<string, boolean>)[TEXT_II_3] = Boolean(r.cam_ket.bo_sung_khi_yeu_cau);
    }
  }

  sec['Người cam kết (Ký tên, ghi rõ họ tên)'] = r.nguoi_cam_ket;
}
