import { formatDate } from "@/lib/date-utils";
import { getDisplayFileName } from "@/lib/document-file";
import { toKhmerDigits } from "@/lib/number-utils";

import type { MinistryProgressReportDetail } from "../../../progress-report-detail-data";
import type { MinistryProgressReportIssueRow } from "../progress-report-issues-data";

export type ProgressReportIssuePrintRow = {
  labelKh: string;
  value: string;
};

export type ProgressReportIssuePrintItem = {
  number: string;
  title: string;
  rows: ProgressReportIssuePrintRow[];
};

export type ProgressReportIssuesPrintModel = {
  ministryName: string;
  ministryLogo: string | null;
  reportTitle: string;
  year: string;
  description: string;
  issues: ProgressReportIssuePrintItem[];
};

function printableValue(value: string | null | undefined) {
  const text = value?.trim();

  return !text || text === "No data" ? "-" : text;
}

function formatSolutionDate(value: string) {
  if (!value || value === "No data") return "-";

  return formatDate(value, "kh");
}

function formatAttachmentName(
  file: MinistryProgressReportIssueRow["progressUpdateAttachment"],
) {
  return file ? getDisplayFileName(file.name, "Document") : "-";
}

function buildIssueRows(issue: MinistryProgressReportIssueRow) {
  return [
    { labelKh: "ក្រុមការងារវិស័យឯកជន", value: printableValue(issue.pswg) },
    { labelKh: "ប្រភេទបញ្ហា", value: printableValue(issue.category) },
    {
      labelKh: "សេចក្តីពិពណ៌នាបញ្ហា",
      value: printableValue(issue.issueDescription),
    },
    { labelKh: "សំណើរបស់ផ្នែកឯកជន", value: printableValue(issue.recommendation) },
    { labelKh: "សេចក្តីសម្រេច RGC", value: printableValue(issue.rgcDecision) },
    { labelKh: "ស្ថានភាព", value: printableValue(issue.status) },
    { labelKh: "អង្គភាពទទួលបន្ទុកទី១", value: printableValue(issue.primaryAgency) },
    { labelKh: "អង្គភាពទទួលបន្ទុកទី២", value: printableValue(issue.secondAgency) },
    { labelKh: "អង្គភាពទទួលបន្ទុកទី៣", value: printableValue(issue.thirdAgency) },
    { labelKh: "អង្គភាពទទួលបន្ទុកទី៤", value: printableValue(issue.fourthAgency) },
    { labelKh: "អង្គភាពទទួលបន្ទុកទី៥", value: printableValue(issue.fifthAgency) },
    { labelKh: "ដំណោះស្រាយវឌ្ឍនភាព", value: printableValue(issue.progressSolution) },
    { labelKh: "សូចនាករ", value: printableValue(issue.indicators) },
    {
      labelKh: "បញ្ហាប្រឈមក្នុងការអនុវត្ត",
      value: printableValue(issue.implementationChallenges),
    },
    { labelKh: "សំណើ", value: printableValue(issue.request) },
    { labelKh: "ប្រភពផ្ទៀងផ្ទាត់", value: printableValue(issue.sourceOfVerification) },
    {
      labelKh: "តំណភ្ជាប់ប្រភពផ្ទៀងផ្ទាត់",
      value: printableValue(issue.linkToVerificationSource),
    },
    { labelKh: "ជំហានបន្ទាប់", value: printableValue(issue.nextStep) },
    { labelKh: "កាលបរិច្ឆេទដោះស្រាយ", value: formatSolutionDate(issue.dateOfIssueSolution) },
    { labelKh: "ឯកសារភ្ជាប់", value: formatAttachmentName(issue.progressUpdateAttachment) },
  ];
}

export function buildProgressReportIssuesPrintModel(
  detail: MinistryProgressReportDetail,
  rows: MinistryProgressReportIssueRow[],
): ProgressReportIssuesPrintModel {
  return {
    ministryName: detail.ministryName,
    ministryLogo: detail.ministryLogo,
    reportTitle: detail.title,
    year: toKhmerDigits(detail.year),
    description: printableValue(detail.description),
    issues: rows.map((issue, index) => ({
      number: toKhmerDigits(index + 1),
      title: printableValue(issue.issue),
      rows: buildIssueRows(issue),
    })),
  };
}
