import { toKhmerLunarDate } from "khmer-chhankitek-calendar";

import type { ViewMeetingSummaryDetail } from "../view-meeting-summary-data";

export type MeetingSummaryPrintTableRow = {
  labelKh: string;
  value: string;
  minHeight?: number;
};

export type MeetingSummaryPrintIssue = {
  number: number;
  titleEn: string;
  rows: MeetingSummaryPrintTableRow[];
};

export type MeetingSummaryPrintModel = {
  sectorKh: string;
  locationKh: string;
  meetingDayKh: string;
  meetingWeekdayKh: string;
  meetingMonthKh: string;
  meetingYearKh: string;
  meetingLunarDateText: string;
  meetingGregorianDateText: string;
  issueCount: number;
  introKh: string;
  issues: MeetingSummaryPrintIssue[];
  participants: {
    pswgReporter: { name: string; position: string };
    pswgRepresentative: { name: string; position: string };
    ministryReporter: { name: string; position: string };
    ministryRepresentative: { name: string; position: string };
  };
};

const STATIC_ISSUE_SUMMARY =
  "ផ្នែកឯកជនបានលើកឡើងថា ថាមពលជាបញ្ហាស្នូលលើថ្លៃដើមរបស់រោងម៉ាស៊ីនកិនស្រូវ លើការសម្ងួត និងកិនអង្ករ។ បច្ចុប្បន្ននេះ រោងម៉ាស៊ីនកិនស្រូវមួយចំនួនបានទទួលនូវការលើកទឹកចិត្តពីរាជរដ្ឋាភិបាល ជាពិសេសការប្រើប្រាស់ប្តូរវេននៅពេលយប់មានតម្លៃថោកជាងពេលថ្ងៃជាដើម។ ជារៀងរាល់ឆ្នាំ ចាប់ពីខែកញ្ញាដល់ខែតុលា ជារយៈពេលនៃការប្រមូលផលស្រូវសំខាន់ ការសម្ងួតស្រូវជាបញ្ហាធំរបស់រោងម៉ាស៊ីនស្រូវ ហើយជាផ្នែកនៃថ្លៃដើមការកិនកែច្នៃអង្ករ ប្រមាណជា២០% ហើយរដូវនៃខែនេះមិនមានថ្ងៃគ្រប់គ្រាន់ ដែរទាមទារឱ្យរោងម៉ាស៊ីនកិនស្រូវត្រូវបំពាក់ឡសម្ងួតដែលប្រើប្រាស់អគ្គិសនី។ តាមរយៈការស្នើសុំបញ្ចុះតម្លៃអគ្គិសនីសម្រាប់រោងម៉ាស៊ីនកិនស្រូវ ក្នុងកិច្ចប្រជុំក្រុមការងារ “ឈ” នេះ កាលពីថ្ងៃទី៥ ខែសីហា ឆ្នាំ២០២៤កន្លងទៅ ផ្នែកឯកជនទទួលបានដំណោះស្រាយពីសំណាក់ភាគីពាក់ព័ន្ធលើបញ្ហានេះ ប៉ុន្តែដំណោះស្រាយនោះហាក់មិនសមស្របទៅនឹងអ្វីដែលវិស័យស្រូវ អង្ករចង់បាន។";

const STATIC_PRIVATE_SECTOR_REQUEST =
  "ស្នើសុំឱ្យរាជរដ្ឋាភិបាលបន្ត និងការសម្របសម្រួលដើម្បី ដោះស្រាយ-អនុគ្រោះ\nនិងការប្រកួតប្រជែងកាន់តែស្មើភាពចំពោះអ្នកប្រើប្រាស់អគ្គិសនី ផ្នែកឯកជនស្នើសុំដូចខាងក្រោម៖\n១. បន្ថយថ្លៃអគ្គិសនី ៤៨០៛/kwh ដើម្បីបន្តជួយសកម្មភាពស្រូវ ក្នុងរយៈពេលណាមួយ និងអាចកែតម្រូវជាដំណាក់កាល។\n២. ស្នើសុំកាត់បន្ថយការកើនឡើងថ្លៃ (សេវា) ការប្រើប្រាស់អគ្គិសនី ដោយគិតពិចារណាកាត់បន្ថយបន្ទុកពាក់ព័ន្ធ និងស្នើពិនិត្យលើ Capacity Charge។";

const STATIC_MEETING_DECISION =
  "បញ្ហាប្រឈម និងសំណូមពរនេះ៖ ផ្នែកឯកជនបានលើកឡើងក្នុងកិច្ចប្រជុំថ្ងៃទី៥\nខែសីហា ឆ្នាំ២០២៤ នៅទីស្នាក់ការសភាពាណិជ្ជកម្ម កម្ពុជា និងបាន\nកិច្ចប្រជុំបានសម្រេចបញ្ជូនករណីនេះឱ្យទៅក្រុមការងារផ្នែកចំណូល និងនាំចេញ (ក្រុម ឆ) ដោះស្រាយ។";

const STATIC_REMARK =
  "ផ្នែកឯកជនបានពិគ្រោះជាមួយក្រុមការងារផ្នែកចំណូល និងនាំចេញ (ក្រុម ឆ)\n(ពិនិត្យនិងធ្វើអន្តរាគមន៍)";

export const MEETING_SUMMARY_PRINT_MOCK: MeetingSummaryPrintModel = {
  sectorKh: "កសិកម្ម",
  locationKh: "ភ្នំពេញ",
  meetingDayKh: "១២",
  meetingWeekdayKh: "សុក្រ",
  meetingMonthKh: "កញ្ញា",
  meetingYearKh: "២០២៥",
  meetingLunarDateText:
    "ថ្ងៃសុក្រ ៥រោច ខែភទ្របទ ឆ្នាំម្សាញ់ សប្តស័ក ពុទ្ធសករាជ ២៥៦៩",
  meetingGregorianDateText: "ថ្ងៃទី១២ ខែកញ្ញា ឆ្នាំ២០២៥",
  issueCount: 1,
  introKh:
    "របាយការណ៍លទ្ធផលកិច្ចប្រជុំក្រុមការងារតាម​វិស័យផ្នែក កសិកម្ម ដែលបញ្ហាសរុបចំនួន ១ ត្រូវបានពិភាក្សា និង សម្រេច មានខ្លឹមសារដូចខាងក្រោម៖",
  participants: {
    pswgReporter: { name: "លោក គង់ សមនា", position: "អ្នកធ្វើរបាយការណ៍" },
    pswgRepresentative: { name: "លោក គង់ សមនា", position: "អ្នកត្រួតពិនិត្យ" },
    ministryReporter: { name: "លោក គង់ សមនា", position: "អនុប្រធាន" },
    ministryRepresentative: { name: "លោក គង់ សមនា", position: "សហប្រធាន" },
  },
  issues: [
    {
      number: 1,
      titleEn: "Import of frozen meat and offal",
      rows: [
        { labelKh: "ប្រភេទបញ្ហា", value: "..." },
        {
          labelKh: "សេចក្តីសង្ខេបបញ្ហារបស់ផ្នែកឯកជន",
          minHeight: 161,
          value: STATIC_ISSUE_SUMMARY,
        },
        {
          labelKh: "សំណើសុំរបស់ផ្នែកឯកជន",
          value: STATIC_PRIVATE_SECTOR_REQUEST,
        },
        {
          labelKh: "ដំណោះស្រាយក្នុងកិច្ចប្រជុំ",
          value: STATIC_MEETING_DECISION,
        },
        {
          labelKh: "សកម្មភាពបន្ទាប់",
          value: "...",
        },
        {
          labelKh: "កំណត់ចំណាំផ្សេងៗ",
          value: STATIC_REMARK,
        },
        { labelKh: "ឯកសារភ្ជាប់", value: "..." },
        { labelKh: "ស្ថានភាពចុងក្រោយ", value: "ពិនិត្យនិងធ្វើអន្តរាគមន៍" },
      ],
    },
  ],
};

function parseMeetingDate(dateLabel?: string | null) {
  if (!dateLabel) {
    return {
      meetingDayKh: MEETING_SUMMARY_PRINT_MOCK.meetingDayKh,
      meetingWeekdayKh: MEETING_SUMMARY_PRINT_MOCK.meetingWeekdayKh,
      meetingMonthKh: MEETING_SUMMARY_PRINT_MOCK.meetingMonthKh,
      meetingYearKh: MEETING_SUMMARY_PRINT_MOCK.meetingYearKh,
      meetingLunarDateText: MEETING_SUMMARY_PRINT_MOCK.meetingLunarDateText,
      meetingGregorianDateText:
        MEETING_SUMMARY_PRINT_MOCK.meetingGregorianDateText,
    };
  }

  try {
    const khmerDate = toKhmerLunarDate(dateLabel);
    return {
      meetingDayKh: khmerDate.gregorianDayText,
      meetingWeekdayKh: khmerDate.dayOfWeek,
      meetingMonthKh: khmerDate.gregorianMonthText,
      meetingYearKh: khmerDate.gregorianYearText,
      meetingLunarDateText: khmerDate.lunarDateText,
      meetingGregorianDateText: khmerDate.gregorianDateText,
    };
  } catch {
    return {
      meetingDayKh: MEETING_SUMMARY_PRINT_MOCK.meetingDayKh,
      meetingWeekdayKh: MEETING_SUMMARY_PRINT_MOCK.meetingWeekdayKh,
      meetingMonthKh: MEETING_SUMMARY_PRINT_MOCK.meetingMonthKh,
      meetingYearKh: MEETING_SUMMARY_PRINT_MOCK.meetingYearKh,
      meetingLunarDateText: MEETING_SUMMARY_PRINT_MOCK.meetingLunarDateText,
      meetingGregorianDateText:
        MEETING_SUMMARY_PRINT_MOCK.meetingGregorianDateText,
    };
  }
}

export function buildMeetingSummaryPrintModel(
  detail?: ViewMeetingSummaryDetail | null,
  options: { useMockIssues?: boolean } = {},
): MeetingSummaryPrintModel {
  const useMockIssues = options.useMockIssues ?? false;

  if (!detail) {
    return MEETING_SUMMARY_PRINT_MOCK;
  }

  const dateParts = parseMeetingDate(detail.date);
  const issueCount = useMockIssues
    ? MEETING_SUMMARY_PRINT_MOCK.issues.length
    : detail.issues.length || MEETING_SUMMARY_PRINT_MOCK.issueCount;

  let issues: MeetingSummaryPrintIssue[] = MEETING_SUMMARY_PRINT_MOCK.issues;

  if (!useMockIssues && detail.issues.length > 0) {
    issues = detail.issues.map((issue, index) => ({
      number: index + 1,
      titleEn: issue.issue || `Issue ${index + 1}`,
      rows: [
        { labelKh: "ប្រភេទបញ្ហា", value: issue.category || "-" },
        {
          labelKh: "សេចក្តីសង្ខេបបញ្ហារបស់ផ្នែកឯកជន",
          minHeight: 120,
          value: issue.issueDescription || "-",
        },
        {
          labelKh: "សំណើរណ៍របស់ផ្នែកឯកជន",
          value: issue.recommendation || "-",
        },
        { labelKh: "ស្ថានភាព", value: issue.status || "-" },
        {
          labelKh: "អង្គភាពរដ្ឋាភិបាល (ទី១)",
          value: issue.primaryAgency || "-",
        },
      ],
    }));
  }

  return {
    sectorKh: detail.privateSectorWg || MEETING_SUMMARY_PRINT_MOCK.sectorKh,
    locationKh: detail.location || MEETING_SUMMARY_PRINT_MOCK.locationKh,
    ...dateParts,
    issueCount,
    introKh: `របាយការណ៍លទ្ធផលកិច្ចប្រជុំ ${detail.wgMeeting || ""} ដែលបញ្ហាសរុបចំនួន ${issueCount} ត្រូវបានពិភាក្សា និង សម្រេច មានខ្លឹមសារដូចខាងក្រោម៖`,
    issues,
    participants: {
      pswgReporter: {
        name: detail.participants.pswgReporter,
        position: detail.participants.pswgReporterPosition,
      },
      pswgRepresentative: {
        name: detail.participants.pswgRepresentative,
        position: detail.participants.pswgRepresentativePosition,
      },
      ministryReporter: {
        name: detail.participants.ministryReporter,
        position: detail.participants.ministryReporterPosition,
      },
      ministryRepresentative: {
        name: detail.participants.ministryRepresentative,
        position: detail.participants.ministryRepresentativePosition,
      },
    },
  };
}
