/**
 * Pseudo applicant values shaped like `fe0/public/assets/data_blank.json` / `be0/src/be01/data_blank.json`,
 * mapped into the three main tabs (Đơn, Báo cáo, Xác nhận) plus evaluation (Mẫu 04).
 */

import type { Author } from '@/components/applicant/initiativeFormTypes';
import {
  type ApplicationFormState,
  type InitiativeFormState,
  INITIAL_APPLICATION_FORM_STATE,
  INITIAL_REPORT_FORM_STATE,
} from '@/components/applicant/initiativeFormTypes';
import { formatContentSummaryFromSection42 } from '@/components/applicant/initiative-draft/reportContentSummaryMerge';
import { formatMergedAuthorEvaluation } from '@/components/applicant/initiative-draft/reportAuthorEvaluationMerge';

const P = '[TEST]';

export const TEST_INITIATIVE_TITLE = `${P} Quy trình số hóa hồ sơ sáng kiến — bộ dữ liệu tự động`;

function pseudoTrangBia() {
  return {
    ten_sang_kien: TEST_INITIATIVE_TITLE,
    tac_gia: `${P} Nguyễn Văn An; ${P} Trần Thị Bình`,
    don_vi: `${P} Khoa Điều dưỡng — ĐHYD TP.HCM`,
    thong_tin_lien_he: `${P} 028-1234-5678 · test.applicant@example.edu.vn`,
    nam: '2026',
  };
}

function pseudoMau01() {
  const hq = {
    loi_ich_kinh_te: `${P} Tiết kiệm ~15% thời gian xử lý hồ sơ.`,
    hieu_qua_giang_day: `${P} Minh họa trực quan hơn cho sinh viên.`,
    tang_nang_suat: `${P} Giảm thao tác lặp khi nhập liệu.`,
    nang_cao_hieu_qua: `${P} Thống nhất quy trình giữa các đơn vị.`,
    nang_cao_chat_luong: `${P} Hồ sơ đầy đủ, ít sai sót hơn.`,
    giam_chi_phi: `${P} Giảm in ấn và lưu trữ giấy.`,
    cai_thien_moi_truong: `${P} Ưu tiên hồ sơ điện tử.`,
    bao_ve_suc_khoe: `${P} Hạn chế tiếp xúc hồ sơ giấy tại quầy.`,
    an_toan_lao_dong: `${P} Quy trình rõ ràng, giảm nhầm lẫn.`,
    nang_cao_nhan_thuc: `${P} Tăng hiểu biết về quy định nộp sáng kiến.`,
  };
  return {
    mo_dau: `${P} Đơn vị đang quản lý hồ sơ thủ công, dễ trễ hạn và khó tra cứu. Cần quy trình số hóa đơn giản, phù hợp cán bộ.`,
    ten_sang_kien: TEST_INITIATIVE_TITLE,
    linh_vuc_ap_dung: `${P} Quản trị văn phòng / CNTT phục vụ đào tạo`,
    tinh_trang_da_biet: `${P} Hiện dùng biểu mẫu Word rời, email và file PDF tách biệt.`,
    muc_dich: `${P} Chuẩn hóa một luồng nộp — duyệt — lưu trữ.`,
    cac_buoc_thuc_hien: `${P} (1) Nhập liệu (2) Kiểm tra (3) Ký số (4) Lưu kho.`,
    dieu_kien_ap_dung: `${P} Máy tính kết nối mạng nội bộ; tài khoản SSO.`,
    linh_vuc_ap_dung_2: `${P} Áp dụng nội bộ trường và đơn vị trực thuộc.`,
    ket_qua_thu_duoc: `${P} Bản demo điền form đầy đủ trong < 20 phút.`,
    danh_sach_ap_dung: [
      { tt: '1', ten_to_chuc: `${P} Phòng Đào tạo`, dia_chi: `${P} Cơ sở 1`, linh_vuc: `${P} Hành chính` },
      { tt: '2', ten_to_chuc: `${P} Khoa X`, dia_chi: `${P} Cơ sở 2`, linh_vuc: `${P} Lâm sàng` },
    ],
    tinh_moi: `${P} Lần đầu gộp ba biểu mẫu vào một luồng nháp tự lưu.`,
    tinh_hieu_qua: hq,
    thong_tin_bao_mat: `${P} Không có thông tin mật trong bản thử nghiệm.`,
    ngay_ky: { ngay: '18', thang: '6', nam: '2026' },
    lanh_dao_don_vi: '',
    tac_gia_sang_kien: `${P} Nguyễn Văn An`,
  };
}

function pseudoMau02() {
  return {
    don_vi: `${P} Khoa Điều dưỡng — ĐHYD TP.HCM`,
    danh_sach_tac_gia: [
      {
        stt: '1',
        ho_ten: `${P} Nguyễn Văn An`,
        ngay_sinh: '15/05/1988',
        noi_cong_tac: `${P} Khoa Điều dưỡng`,
        chuc_danh: `${P} Giảng viên`,
        trinh_do: `${P} Thạc sĩ`,
        ty_le: '60',
      },
      {
        stt: '2',
        ho_ten: `${P} Trần Thị Bình`,
        ngay_sinh: '22/11/1990',
        noi_cong_tac: `${P} Phòng NCKH`,
        chuc_danh: `${P} Cán bộ`,
        trinh_do: `${P} Cử nhân`,
        ty_le: '40',
      },
    ],
    ten_sang_kien: TEST_INITIATIVE_TITLE,
    chu_dau_tu: `${P} Đại học Y Dược TP.HCM`,
    linh_vuc_ap_dung: `${P} Quản trị văn phòng / CNTT phục vụ đào tạo`,
    ngay_ap_dung: '10/09/2025',
    noi_dung: `${P} Mô tả ngắn: mẫu điền tự động kiểm tra textarea Đơn §4.`,
    phan_loai: {
      giai_phap_ky_thuat: true,
      sang_kien_tu_nckh: false,
      sang_kien_tu_sach: false,
    },
    thong_tin_bao_mat: `${P} Không có thông tin mật trong bản thử nghiệm.`,
    dieu_kien_ap_dung: `${P} Thiết bị đọc PDF; trình duyệt hiện đại.`,
    danh_gia_tac_gia: `${P} Sáng kiến giúp giảm công sức nhập liệu.`,
    danh_gia_to_chuc: `${P} Đơn vị thử nghiệm phản hồi tích cực.`,
    danh_sach_tham_gia: [
      {
        stt: '1',
        ho_ten: `${P} Lê Văn Cường`,
        ngay_sinh: '01/01/1992',
        noi_cong_tac: `${P} IT`,
        chuc_danh: `${P} Kỹ thuật`,
        trinh_do: `${P} Kỹ sư`,
        noi_dung_ho_tro: `${P} Hỗ trợ triển khai pilot.`,
      },
    ],
    ngay_ky: { ngay: '18', thang: '6', nam: '2026' },
    lanh_dao_don_vi: '',
    tac_gia_sang_kien: `${P} Nguyễn Văn An`,
  };
}

function pseudoMau03() {
  return {
    ngay_ky: { ngay: '20', thang: '6', nam: '2026' },
    ten_sang_kien: TEST_INITIATIVE_TITLE,
    tac_gia_chinh: `${P} Nguyễn Văn An`,
    chuc_vu_don_vi: `${P} Giảng viên — Khoa Điều dưỡng`,
    ty_le_dong_gop: [
      { stt: '1', ho_ten: `${P} Nguyễn Văn An`, don_vi: `${P} Khoa Điều dưỡng`, phan_tram: '60', chu_ky: '' },
      { stt: '2', ho_ten: `${P} Trần Thị Bình`, don_vi: `${P} Phòng NCKH`, phan_tram: '40', chu_ky: '' },
    ],
    tac_gia_chinh_ky: `${P} Nguyễn Văn An`,
  };
}

function pseudoMau04() {
  return {
    ten_sang_kien: TEST_INITIATIVE_TITLE,
    tac_gia: `${P} Nguyễn Văn An`,
    chuc_vu_don_vi: `${P} Giảng viên — Khoa Điều dưỡng`,
    tinh_moi: { nhan_xet: `${P} Có tính mới ở mức khá trong đơn vị.`, diem: '28' },
    tinh_hieu_qua: { nhan_xet: `${P} Hiệu quả rõ trên phạm vi khoa.`, diem: '42' },
    tong_cong: '70',
    ket_luan: `${P} Đạt mức khá — đủ điều kiện xét tiếp (dữ liệu thử).`,
    ngay_ky: { ngay: '25', thang: '6', nam: '2026' },
    thanh_vien_hoi_dong: `${P} TS. A, PGS.TS. B, TS. C (thử nghiệm form).`,
  };
}

export function pseudoBanCamKet() {
  return {
    ngay_ky: { ngay: '25', thang: '6', nam: '2026' },
    tac_gia_dang_ky: `${P} Nguyễn Văn An`,
    cccd: `${P} 079088012345`,
    don_vi: `${P} Khoa Điều dưỡng`,
    ten_bai_bao: `${P} Bài báo minh họa (test)`,
    nam_xet: '2026',
    vai_tro: { tac_gia_chinh: true, dong_tac_gia: false },
    cam_ket: {
      quyen_so_huu_1: true,
      quyen_so_huu_2: true,
      dong_thuan: true,
      bai_bao_uy_tin: true,
      tuan_thu_phap_luat: true,
    },
    nguoi_cam_ket: `${P} Nguyễn Văn An`,
  };
}

/** Full tree (for exports / parity with `data_blank.json`). */
export function buildPseudoDataBlankTree() {
  return {
    trang_bia: pseudoTrangBia(),
    mau_01: pseudoMau01(),
    mau_02: pseudoMau02(),
    mau_03: pseudoMau03(),
    mau_04: pseudoMau04(),
    ban_cam_ket: pseudoBanCamKet(),
  };
}

function classificationFromMau02(phanLoai: ReturnType<typeof pseudoMau02>['phan_loai']) {
  if (phanLoai.sang_kien_tu_sach) return 'textbook' as const;
  if (phanLoai.sang_kien_tu_nckh) return 'research' as const;
  if (phanLoai.giai_phap_ky_thuat) return 'technical' as const;
  return null;
}

function authorsFromMau02(rows: ReturnType<typeof pseudoMau02>['danh_sach_tac_gia']): Author[] {
  const base = 880000;
  return rows.map((row, i) => ({
    id: base + i,
    name: row.ho_ten,
    dob: row.ngay_sinh,
    workplace: row.noi_cong_tac,
    title: row.chuc_danh,
    qualification: row.trinh_do,
    contributionPercent: Number.parseInt(String(row.ty_le), 10) || 0,
  }));
}

/** Patch for `InitiativeApplicationForm` (file inputs unchanged by caller). */
export function buildApplicationTestPatch(): Partial<ApplicationFormState> {
  const m02 = pseudoMau02();
  const bia = pseudoTrangBia();
  const nk = m02.ngay_ky;
  return {
    unitName: m02.don_vi,
    authors: authorsFromMau02(m02.danh_sach_tac_gia),
    initiativeName: m02.ten_sang_kien,
    investorName: m02.chu_dau_tu,
    applicationField: m02.linh_vuc_ap_dung,
    firstApplyDate: m02.ngay_ap_dung,
    initiativeClassification: classificationFromMau02(m02.phan_loai),
    contentSummary: m02.noi_dung,
    confidentialInfo: m02.thong_tin_bao_mat,
    conditions: m02.dieu_kien_ap_dung,
    authorEvaluation: m02.danh_gia_tac_gia,
    trialEvaluation: m02.danh_gia_to_chuc,
    supportStaff: m02.danh_sach_tham_gia.map((s, i) => ({
      id: 770000 + i,
      name: s.ho_ten,
      dob: s.ngay_sinh,
      workplace: s.noi_cong_tac,
      title: s.chuc_danh,
      qualification: s.trinh_do,
      supportContent: s.noi_dung_ho_tro,
    })),
    submissionDay: Number.parseInt(nk.ngay, 10) || 18,
    submissionMonth: Number.parseInt(nk.thang, 10) || 6,
    submissionYear: nk.nam || bia.nam,
    banCamKet: pseudoBanCamKet(),
    honestyConfirmed: true,
  };
}

/** Full report state for báo cáo tab. */
export function buildReportTestState(): InitiativeFormState {
  const m01 = pseudoMau01();
  const hq = m01.tinh_hieu_qua;
  const trialUnits = m01.danh_sach_ap_dung.map((r, i) => ({
    id: 660000 + i,
    name: r.ten_to_chuc,
    address: r.dia_chi,
    field: r.linh_vuc,
  }));
  const d = m01.ngay_ky;
  const y = Number.parseInt(d.nam, 10) || 2026;
  const mo = Number.parseInt(d.thang, 10) || 6;
  const da = Number.parseInt(d.ngay, 10) || 18;
  const submissionDate = `${String(da).padStart(2, '0')}/${String(mo).padStart(2, '0')}/${y}`;
  const bia = pseudoTrangBia();

  return {
    ...INITIAL_REPORT_FORM_STATE,
    introduction: m01.mo_dau,
    initiativeName: m01.ten_sang_kien,
    representativeAuthor: `${P} Nguyễn Văn An`,
    representativePhone: '028-1234-5678',
    representativeEmail: 'test.applicant@example.edu.vn',
    applicationField: m01.linh_vuc_ap_dung,
    currentStatus: m01.tinh_trang_da_biet,
    purpose: m01.muc_dich,
    solutionContent: '',
    implementationSteps: m01.cac_buoc_thuc_hien,
    firstAppliedUnit: `${P} Phòng Đào tạo — áp dụng thử Q1/2026`,
    achievedResult: m01.ket_qua_thu_duoc,
    conditions: m01.dieu_kien_ap_dung,
    trialUnits,
    novelty: m01.tinh_moi,
    effectiveness: {
      economic: hq.loi_ich_kinh_te,
      social: `${hq.nang_cao_hieu_qua} ${hq.giam_chi_phi} ${hq.nang_cao_nhan_thuc}`.trim(),
      teaching: hq.hieu_qua_giang_day,
      productivity: hq.tang_nang_suat,
      quality: hq.nang_cao_chat_luong,
      environment: `${hq.cai_thien_moi_truong} ${hq.bao_ve_suc_khoe}`.trim(),
      safety: hq.an_toan_lao_dong,
    },
    confidentialInfo: m01.thong_tin_bao_mat,
    submissionDate,
    authorName: m01.tac_gia_sang_kien,
    honestyConfirmed: true,
  };
}

export type ContributionTestSlice = {
  initiativeName: string;
  mainAuthor: string;
  position: string;
  representativePercent: number;
  submissionDate: Date;
};

export function buildContributionTestSlice(): ContributionTestSlice {
  const m03 = pseudoMau03();
  const d = m03.ngay_ky;
  const submissionDate = new Date(
    Number.parseInt(d.nam, 10) || 2026,
    (Number.parseInt(d.thang, 10) || 6) - 1,
    Number.parseInt(d.ngay, 10) || 20,
  );
  const first = m03.ty_le_dong_gop[0];
  return {
    initiativeName: m03.ten_sang_kien,
    mainAuthor: m03.tac_gia_chinh,
    position: m03.chuc_vu_don_vi,
    representativePercent: Number.parseInt(String(first?.phan_tram), 10) || 60,
    submissionDate,
  };
}

/** Optional: evaluation tab (Mẫu 04 / cam kết only used for text hints). */
export function buildEvaluationTestSlice() {
  const m04 = pseudoMau04();
  const bc = pseudoBanCamKet();
  const d = m04.ngay_ky;
  const evaluationDate = new Date(
    Number.parseInt(d.nam, 10) || 2026,
    (Number.parseInt(d.thang, 10) || 6) - 1,
    Number.parseInt(d.ngay, 10) || 25,
  );
  return {
    initiativeName: m04.ten_sang_kien,
    authorName: m04.tac_gia,
    position: m04.chuc_vu_don_vi,
    evaluationDate,
    noveltyLevel: 'medium' as const,
    noveltyScore: Number.parseInt(m04.tinh_moi.diem, 10) || 28,
    noveltyComment: `${m04.tinh_moi.nhan_xet} (${bc.ten_bai_bao})`,
    effectivenessLevel: 'medium' as const,
    effectivenessScore: Number.parseInt(m04.tinh_hieu_qua.diem, 10) || 42,
    effectivenessComment: m04.tinh_hieu_qua.nhan_xet,
    conclusion: `${m04.ket_luan}\n${m04.thanh_vien_hoi_dong}`,
    status: 'draft' as const,
  };
}

/** Apply đơn patch and return fields to sync báo cáo / đơn shared keys. */
export function mergeApplicationTestIntoState(
  prev: ApplicationFormState,
  patch: Partial<ApplicationFormState>,
): ApplicationFormState {
  return {
    ...prev,
    ...patch,
    authors: patch.authors ?? prev.authors,
    supportStaff: patch.supportStaff ?? prev.supportStaff,
  };
}

/** After report test fill: extras to push onto application draft for §4 / §5 parity. */
export function applicationSyncAfterReportFill(report: InitiativeFormState): Partial<ApplicationFormState> {
  return {
    initiativeName: report.initiativeName,
    applicationField: report.applicationField,
    contentSummary: formatContentSummaryFromSection42(report),
    conditions: report.conditions,
    trialEvaluation: report.achievedResult,
    confidentialInfo: report.confidentialInfo,
    authorEvaluation: formatMergedAuthorEvaluation(report),
  };
}

/** Authors list for contribution tab when seeding from Mẫu 03 (must sum 100). */
export function authorsForContributionTab(): Author[] {
  return authorsFromMau02(pseudoMau02().danh_sach_tac_gia);
}
