"use client";

import { useAppLanguage } from "@/components/providers/app-language-provider";

export type WgIssuesLanguage = "en" | "km";

type TranslationKey =
  | "pageTitle"
  | "pageSubtitle"
  | "exportAsXlsx"
  | "exporting"
  | "exportSuccess"
  | "exportFailed"
  | "new"
  | "list"
  | "grid"
  | "allStatus"
  | "category"
  | "primaryAgency"
  | "year"
  | "progressReport"
  | "attachment"
  | "totalIssues"
  | "solved"
  | "inProgress"
  | "notAddressed"
  | "draft"
  | "newSubmission"
  | "previous"
  | "next"
  | "no"
  | "issue"
  | "issueCategory"
  | "issueDescription"
  | "recommendation"
  | "governmentDecision"
  | "status"
  | "issueReference"
  | "solutionReference"
  | "action"
  | "submittedDate"
  | "notAvailable"
  | "moreActions"
  | "viewDetail"
  | "edit"
  | "sendRequest"
  | "removeIssue"
  | "removeIssueQuestion"
  | "removeIssueUndone"
  | "back"
  | "cancel"
  | "close"
  | "issueDetail"
  | "issueCreated"
  | "issueUpdated"
  | "issueRemoved"
  | "removeFailed"
  | "addIssue"
  | "editIssue"
  | "workingGroupName"
  | "governmentAgency"
  | "loadingAgency"
  | "writeIssueTitle"
  | "loadingIssueCategories"
  | "selectIssueCategory"
  | "writeDescription"
  | "writeRecommendation"
  | "clickToUpload"
  | "orDragAndDrop"
  | "secondAgency"
  | "thirdAgency"
  | "fourthAgency"
  | "fifthAgency"
  | "selectAgency"
  | "saving"
  | "save"
  | "saveChanges"
  | "submittedDetail"
  | "governmentPrimaryAgency"
  | "meetingDate"
  | "meetingReferenceDocument";

const translations: Record<WgIssuesLanguage, Record<TranslationKey, string>> = {
  en: {
    pageTitle: "Working Group A Issues",
    pageSubtitle: "Working Group A Issues",
    exportAsXlsx: "Export as xlsx",
    exporting: "Exporting...",
    exportSuccess: "Excel file downloaded successfully.",
    exportFailed: "Could not export issues.",
    new: "New",
    list: "List",
    grid: "Grid",
    allStatus: "All Status",
    category: "Category",
    primaryAgency: "Primary Agency",
    year: "Year",
    progressReport: "Progress Report",
    attachment: "Attachment",
    totalIssues: "Total Issues",
    solved: "Solved",
    inProgress: "In Progress",
    notAddressed: "Not Addressed",
    draft: "Draft",
    newSubmission: "New Submission",
    previous: "Previous",
    next: "Next",
    no: "No.",
    issue: "Issue",
    issueCategory: "Issue Category",
    issueDescription: "Issue Description",
    recommendation: "Recommendation",
    governmentDecision: "Government Decision",
    status: "Status",
    issueReference: "Issue Reference",
    solutionReference: "Solution Reference",
    action: "Action",
    submittedDate: "Submitted Date",
    notAvailable: "Not available",
    moreActions: "More actions",
    viewDetail: "View Detail",
    edit: "Edit",
    sendRequest: "Send Request",
    removeIssue: "Remove Issue",
    removeIssueQuestion: "Are you sure you want to remove",
    removeIssueUndone: "This action cannot be undone.",
    back: "Back",
    cancel: "Cancel",
    close: "Close",
    issueDetail: "Issue Detail",
    issueCreated: "Issue created successfully.",
    issueUpdated: "Issue updated successfully.",
    issueRemoved: "Issue removed successfully.",
    removeFailed: "Could not remove the issue.",
    addIssue: "Add Issue",
    editIssue: "Edit Issue",
    workingGroupName: "Working Group Name",
    governmentAgency: "Government Agency",
    loadingAgency: "Loading agency...",
    writeIssueTitle: "Write Issue title",
    loadingIssueCategories: "Loading issue categories",
    selectIssueCategory: "Select issue category",
    writeDescription: "Write description ........",
    writeRecommendation: "Write Recommendation..........",
    clickToUpload: "Click to upload",
    orDragAndDrop: "or drag and drop",
    secondAgency: "Second Agency",
    thirdAgency: "Third Agency",
    fourthAgency: "Fourth Agency",
    fifthAgency: "Fifth Agency",
    selectAgency: "Select Agency",
    saving: "Saving...",
    save: "Save",
    saveChanges: "Save Changes",
    submittedDetail: "Submitted Detail",
    governmentPrimaryAgency: "Government Primary Agency",
    meetingDate: "Meeting Date",
    meetingReferenceDocument: "Meeting Reference Document",
  },
  km: {
    pageTitle: "បញ្ហាក្រុមការងារ A",
    pageSubtitle: "បញ្ហាក្រុមការងារ A",
    exportAsXlsx: "នាំចេញជា xlsx",
    exporting: "កំពុងនាំចេញ...",
    exportSuccess: "បានទាញយកឯកសារ Excel ដោយជោគជ័យ។",
    exportFailed: "មិនអាចនាំចេញបញ្ហាបានទេ។",
    new: "ថ្មី",
    list: "បញ្ជី",
    grid: "ក្រឡា",
    allStatus: "ស្ថានភាពទាំងអស់",
    category: "ប្រភេទ",
    primaryAgency: "ស្ថាប័នដឹកនាំ",
    year: "ឆ្នាំ",
    progressReport: "របាយការណ៍វឌ្ឍនភាព",
    attachment: "ឯកសារភ្ជាប់",
    totalIssues: "បញ្ហាសរុប",
    solved: "បានដោះស្រាយ",
    inProgress: "កំពុងដំណើរការ",
    notAddressed: "មិនទាន់ដោះស្រាយ",
    draft: "ព្រាង",
    newSubmission: "ការដាក់ស្នើថ្មី",
    previous: "មុន",
    next: "បន្ទាប់",
    no: "ល.រ",
    issue: "បញ្ហា",
    issueCategory: "ប្រភេទបញ្ហា",
    issueDescription: "ការពិពណ៌នាបញ្ហា",
    recommendation: "អនុសាសន៍",
    governmentDecision: "សេចក្ដីសម្រេចរបស់រាជរដ្ឋាភិបាល",
    status: "ស្ថានភាព",
    issueReference: "ឯកសារយោងបញ្ហា",
    solutionReference: "ឯកសារយោងដំណោះស្រាយ",
    action: "សកម្មភាព",
    submittedDate: "កាលបរិច្ឆេទដាក់ស្នើ",
    notAvailable: "មិនមាន",
    moreActions: "សកម្មភាពបន្ថែម",
    viewDetail: "មើលលម្អិត",
    edit: "កែសម្រួល",
    sendRequest: "ផ្ញើសំណើ",
    removeIssue: "លុបបញ្ហា",
    removeIssueQuestion: "តើបងពិតជាចង់លុបបញ្ហា",
    removeIssueUndone: "សកម្មភាពនេះមិនអាចត្រឡប់វិញបានទេ។",
    back: "ត្រឡប់ក្រោយ",
    cancel: "បោះបង់",
    close: "បិទ",
    issueDetail: "ព័ត៌មានលម្អិតបញ្ហា",
    issueCreated: "បានបង្កើតបញ្ហាដោយជោគជ័យ។",
    issueUpdated: "បានកែប្រែបញ្ហាដោយជោគជ័យ។",
    issueRemoved: "បានលុបបញ្ហាដោយជោគជ័យ។",
    removeFailed: "មិនអាចលុបបញ្ហាបានទេ។",
    addIssue: "បន្ថែមបញ្ហា",
    editIssue: "កែសម្រួលបញ្ហា",
    workingGroupName: "ឈ្មោះក្រុមការងារ",
    governmentAgency: "ស្ថាប័នរដ្ឋាភិបាល",
    loadingAgency: "កំពុងផ្ទុកស្ថាប័ន...",
    writeIssueTitle: "សរសេរចំណងជើងបញ្ហា",
    loadingIssueCategories: "កំពុងផ្ទុកប្រភេទបញ្ហា",
    selectIssueCategory: "ជ្រើសរើសប្រភេទបញ្ហា",
    writeDescription: "សរសេរការពិពណ៌នា ........",
    writeRecommendation: "សរសេរអនុសាសន៍ ........",
    clickToUpload: "ចុចដើម្បីផ្ទុកឡើង",
    orDragAndDrop: "ឬអូសនិងទម្លាក់",
    secondAgency: "ស្ថាប័នទីពីរ",
    thirdAgency: "ស្ថាប័នទីបី",
    fourthAgency: "ស្ថាប័នទីបួន",
    fifthAgency: "ស្ថាប័នទីប្រាំ",
    selectAgency: "ជ្រើសរើសស្ថាប័ន",
    saving: "កំពុងរក្សាទុក...",
    save: "រក្សាទុក",
    saveChanges: "រក្សាទុកការកែប្រែ",
    submittedDetail: "ព័ត៌មានដាក់ស្នើ",
    governmentPrimaryAgency: "ស្ថាប័នរដ្ឋាភិបាលដឹកនាំ",
    meetingDate: "កាលបរិច្ឆេទប្រជុំ",
    meetingReferenceDocument: "ឯកសារយោងកិច្ចប្រជុំ",
  },
};

const knownTextTranslations: Record<
  string,
  Record<WgIssuesLanguage, string>
> = {
  "All Status": { en: "All Status", km: "ស្ថានភាពទាំងអស់" },
  Category: { en: "Category", km: "ប្រភេទ" },
  "Primary Agency": { en: "Primary Agency", km: "ស្ថាប័នដឹកនាំ" },
  Year: { en: "Year", km: "ឆ្នាំ" },
  "Progress Report": { en: "Progress Report", km: "របាយការណ៍វឌ្ឍនភាព" },
  Attachment: { en: "Attachment", km: "ឯកសារភ្ជាប់" },

  "Total Issues": { en: "Total Issues", km: "បញ្ហាសរុប" },
  Solved: { en: "Solved", km: "បានដោះស្រាយ" },
  "In Progress": { en: "In Progress", km: "កំពុងដំណើរការ" },
  "Not Addressed": { en: "Not Addressed", km: "មិនទាន់ដោះស្រាយ" },
  Draft: { en: "Draft", km: "ព្រាង" },
  Saved: { en: "Saved", km: "បានរក្សាទុក" },
  "New Submission": { en: "New Submission", km: "ការដាក់ស្នើថ្មី" },

  "Not available": { en: "Not available", km: "មិនមាន" },
  Legislation: { en: "Legislation", km: "ច្បាប់" },
  Trade: { en: "Trade", km: "ពាណិជ្ជកម្ម" },
  Governance: { en: "Governance", km: "អភិបាលកិច្ច" },
  Market: { en: "Market", km: "ទីផ្សារ" },
  Procedure: { en: "Procedure", km: "នីតិវិធី" },
  Policy: { en: "Policy", km: "គោលនយោបាយ" },
  Taxation: { en: "Taxation", km: "ពន្ធដារ" },
  "Human Resource": { en: "Human Resource", km: "ធនធានមនុស្ស" },
};

export function tWgIssues(
  language: WgIssuesLanguage,
  key: TranslationKey,
): string {
  return translations[language]?.[key] ?? translations.en[key];
}

export function translateWgIssuesText(
  language: WgIssuesLanguage,
  value: string,
): string {
  return knownTextTranslations[value]?.[language] ?? value;
}

export function useWgIssuesLanguage() {
  const { language } = useAppLanguage();

  return language === "kh" ? "km" : "en";
}
