import type { DataRecord } from './templateTypes';
import type { OfficialBieuMauDocument } from './mapDraftToOfficialBieuMau';

/**
 * Reverses {@link buildOfficialBieuMauFromDraft} into the same flat
 * `DataRecord` shape as {@link buildTemplateDataFromDraft} so DOCX placeholders
 * match `public/assets/bieu_mau_sang_kien_template.json` (Review merged JSON).
 */
export function officialBieuMauToTemplateDataRecord(
  o: OfficialBieuMauDocument,
): DataRecord {
  const bia = o['TRANG BÌA'];
  const m01 = o['MẪU SỐ 01 - BÁO CÁO MÔ TẢ SÁNG KIẾN'];
  const m4 = m01['4. Mô tả sáng kiến'];
  const m42 = m4['4.2 Nội dung giải pháp đề nghị công nhận là sáng kiến'];
  const vnd = m42['Về nội dung của sáng kiến'];
  const hieuQua = m42['Về tính hiệu quả'];
  const m02 = o['MẪU SỐ 02 - ĐƠN ĐỀ NGHỊ CÔNG NHẬN SÁNG KIẾN'];
  const m03 = o['MẪU SỐ 03 - BẢN XÁC NHẬN TỶ LỆ (%) ĐÓNG GÓP VÀO VIỆC TẠO RA SÁNG KIẾN'];
  const trialRows = vnd['Danh sách đơn vị/cá nhân đã tham gia áp dụng thử hoặc lần đầu'];
  const supportRows =
    m02['Danh sách những người đã tham gia áp dụng thử hoặc áp dụng sáng kiến lần đầu'];
  const m02Authors = m02['Danh sách tác giả'];
  const m03tyLe = m03['Tỷ lệ đóng góp'];
  const contactLine = bia['Thông tin liên hệ (Điện thoại, Email)'] || '';
  let representativePhone = '';
  let representativeEmail = '';
  if (contactLine.includes(' · ')) {
    const parts = contactLine.split(' · ').map((p) => p.trim());
    representativePhone = parts[0] || '';
    representativeEmail = parts.slice(1).join(' · ') || '';
  } else if (contactLine.includes('@')) {
    representativeEmail = contactLine;
  } else {
    representativePhone = contactLine;
  }

  const trialLines = trialRows
    .map((u) => {
      const n = u['Tên tổ chức/cá nhân']?.trim() ?? '';
      const a = u['Địa chỉ']?.trim() ?? '';
      if (!n && !a) return '';
      return a ? `${n} — ${a}` : n;
    })
    .filter(Boolean)
    .join('\n');

  const supportLines = supportRows
    .map((s) => {
      const n = s['Họ và tên']?.trim() ?? '';
      const c = s['Nội dung công việc hỗ trợ']?.trim() ?? '';
      if (!n && !c) return '';
      return c ? `${n}: ${c}` : n;
    })
    .filter(Boolean)
    .join('\n');

  const authorsListFromM02 = m02Authors
    .map(
      (x) =>
        `${x['Họ và tên'] ?? ''} — ${x['Chức danh'] ?? ''} (${x['Tỷ lệ (%) đóng góp vào việc tạo ra sáng kiến'] ?? ''}%) · ${x['Nơi công tác'] ?? ''}`.trim(),
    )
    .filter((line) => line.length > 0);
  const authorsList = bia['Tác giả/nhóm tác giả sáng kiến'] || authorsListFromM02.join('\n');

  const data: DataRecord = {
    initiativeName: bia['Tên sáng kiến (Tiếng Việt)'] || '',
    initiativeNameReport: m01['2. Tên sáng kiến (tên quy trình, giải pháp, phương pháp)'] || '',
    unitName: bia['Đơn vị công tác'] || m02['Đơn vị'] || '',
    investorName: m02['Chủ đầu tư tạo ra sáng kiến'] || '',
    applicationField: m02['Lĩnh vực áp dụng sáng kiến'] || m01['3. Lĩnh vực áp dụng của sáng kiến'] || vnd['Lĩnh vực áp dụng'] || '',
    firstApplyDate: m02['Ngày sáng kiến được áp dụng'] || '',
    contentSummary: m02['Nội dung của sáng kiến'] || '',
    confidentialInfoApp: m02['Những thông tin cần được bảo mật (nếu có)'] || '',
    conditionsApp: m02['Các điều kiện cần thiết để áp dụng sáng kiến'] || '',
    authorEvaluation: m02['Đánh giá lợi ích theo ý kiến của tác giả'] || '',
    trialEvaluation: m02['Đánh giá lợi ích theo ý kiến của tổ chức, cá nhân đã tham gia áp dụng sáng kiến lần đầu'] || '',
    authorsList,
    representativePhone,
    representativeEmail,
    introduction: m01['1. Mở đầu'] || '',
    currentStatus: m4['4.1 Tình trạng giải pháp đã biết hoặc hiện trạng công tác khi chưa có sáng kiến'] || '',
    purpose: m42['Mục đích của sáng kiến'] || '',
    implementationSteps: vnd['Các bước thực hiện giải pháp'] || '',
    achievedResult: vnd['Kết quả thu được'] || '',
    conditionsReport: vnd['Các điều kiện cần thiết để áp dụng giải pháp'] || '',
    novelty: m42['Về tính mới của sáng kiến'] || '',
    trialUnitsList: trialLines,
    supportStaffList: supportLines,
    effectivenessEconomic: hieuQua['Tạo ra lợi ích kinh tế'] || '',
    effectivenessSocial: hieuQua['Nâng cao hiệu quả công việc'] || '',
    effectivenessTeaching: hieuQua['Đem lại hiệu quả trong giảng dạy'] || '',
    effectivenessProductivity: hieuQua['Tăng năng suất lao động'] || '',
    effectivenessQuality: hieuQua['Nâng cao chất lượng công việc, dịch vụ'] || '',
    effectivenessEnvironment: hieuQua['Cải thiện môi trường, điều kiện học tập, làm việc, sống'] || '',
    effectivenessSafety: hieuQua['Đảm bảo an toàn lao động, PCCC'] || '',
    confidentialInfoReport: m01['6. Những thông tin cần được bảo mật (nếu có)'] || '',
    authorName: m01['Tác giả sáng kiến (Ký, ghi rõ họ tên)'] || m02['Tác giả sáng kiến (Ký, ghi rõ họ tên)'] || '',
    contributionInitiativeName: m03['1. Tên sáng kiến'] || '',
    contributionMainAuthor: m03['2. Tác giả chính/Đại diện nhóm tác giả sáng kiến'] || '',
    contributionPosition: m03['Chức vụ, đơn vị công tác'] || '',
    representativeAuthor:
      m01['Tác giả sáng kiến (Ký, ghi rõ họ tên)'] || bia['Tác giả/nhóm tác giả sáng kiến'] || '',
  };

  const authorRows = m02Authors
    .map((x) => ({
      name: x['Họ và tên'] || '',
      title: x['Chức danh'] || '',
      workplace: x['Nơi công tác'] || '',
      contributionPercent: String(x['Tỷ lệ (%) đóng góp vào việc tạo ra sáng kiến'] || '').replace(
        /%$/,
        '',
      ),
    }))
    .filter((row) => Object.values(row).some((v) => String(v).trim() !== ''));

  if (authorRows.length > 0) {
    data.authors = authorRows as unknown as DataRecord[];
  }

  const partRows = m03tyLe
    .map((p) => ({
      fullName: p['Họ và tên'] || '',
      workUnit: p['Đơn vị công tác'] || '',
      contributionPercent: String(p['% đóng góp'] || '').replace(/%$/, ''),
    }))
    .filter((row) => Object.values(row).some((v) => String(v).trim() !== ''));

  if (partRows.length > 0) {
    data.participants = partRows as unknown as DataRecord[];
  }

  return data;
}
