export type StakeholderLanguage = "en" | "kh";

export function normalizeStakeholderLanguage(
  language?: string | null,
): StakeholderLanguage {
  return language === "kh" || language === "km" ? "kh" : "en";
}

export const stakeholderI18n = {
  en: {
    title: "Stakeholder",
    description: "Manage stakeholders and their organizations",
    addStakeholder: "Add Stakeholder",
    editStakeholder: "Edit Stakeholder",
    viewStakeholder: "View Stakeholder",
    search: "Search",
    list: "List",
    grid: "Grid",
    allStatus: "All Status",
    type: "Type",
    user: "User",
    users: "Users",
    yes: "Yes",
    no: "No",
    active: "Active",
    inactive: "Inactive",
    status: "Status",
    logo: "Logo",
    stakeholderName: "Stakeholder Name",
    relatedTo: "Related to",
    coChair: "Co-Chair",
    coChairPlaceholder: "Enter co-chair name",
    coChairMaxLength: "Co-chair name must be 150 characters or less.",
    nameMaxLength: "Stakeholder name must be 255 characters or less.",
    descriptionLabel: "Description",
    created: "Created",
    lastUpdate: "Last Update",
    noCol: "No.",
    empty: "No stakeholders found.",
    view: "View",
    addUser: "Add user",
    edit: "Edit",
    delete: "Delete",
    close: "Close",
    cancel: "Cancel",
    save: "Save",
    saveChanges: "Save Changes",
    saving: "Saving...",
    uploading: "Upload",
    change: "Change",
    totalStakeholders: "Total Stakeholders",
    ministry: "Ministry",
    privateSector: "Private Sector",
    stakeholderType: "Stakeholder Type",
    relatedStakeholder: "Related Stakeholder",
    noRelatedStakeholder: "No related stakeholder",
    stakeholderLogo: "Stakeholder Logo",
    logoHint: "PNG, JPG, WEBP, or SVG · up to 5 MB",
    namePlaceholder: "Stakeholder name",
    descriptionPlaceholder: "Write stakeholder description",
    selectType: "Select type",
    selectStatus: "Select status",
    selectRelated: "Select related stakeholder",
    loadingTypes: "Loading stakeholder types",
    loadingStakeholders: "Loading stakeholders",
    logoImageError: "Logo must be an image (PNG, JPG, WEBP, or SVG).",
    logoSizeError: "Logo file must be 5 MB or smaller.",
    nameRequired: "Please enter stakeholder name.",
    typeRequired: "Please select stakeholder type.",
    relatedInvalid: "Please select a valid related stakeholder.",
    relatedSelf: "Stakeholder cannot be related to itself.",
    deleteTitle: "Delete Stakeholder",
    deleteBody: (name: string) =>
      `Are you sure you want to delete ${name}? This will remove it from the active stakeholder list.`,
    thisStakeholder: "this stakeholder",
    deleting: "Deleting...",
    addUserTitle: "Add User to Stakeholder",
    selectUser: "Select user",
    selectUserRequired: "Please select a user.",
    adding: "Adding...",
    addUserSubmit: "Add User",
    allUsersAdded: "All available users are already added to this stakeholder.",
    noUsersAdded: "No users added to this stakeholder.",
    userCount: (count: number) => `${count} user${count === 1 ? "" : "s"}`,
    userFallback: (id: string | number) => `User #${id}`,
    createdSuccess: "Stakeholder created successfully.",
    updatedSuccess: "Stakeholder updated successfully.",
    deletedSuccess: "Stakeholder deleted successfully.",
    userAddedSuccess: "User added to stakeholder.",
    createError: "Unable to create stakeholder.",
    updateError: "Unable to update stakeholder.",
    deleteError: "Unable to delete stakeholder.",
    addUserError: "Unable to add user to stakeholder.",
    loadError: "Unable to load stakeholders.",
    loadDetailError: "Unable to load stakeholder detail.",
    loadUsersError: "Unable to load users for this stakeholder.",
  },
  kh: {
    title: "ស្ថាប័ន",
    description: "គ្រប់គ្រងភាគីពាក់ព័ន្ធ និងអង្គភាពរបស់ពួកគេ",
    addStakeholder: "បន្ថែមភាគីពាក់ព័ន្ធ",
    editStakeholder: "កែសម្រួលភាគីពាក់ព័ន្ធ",
    viewStakeholder: "មើលភាគីពាក់ព័ន្ធ",
    search: "ស្វែងរក",
    list: "បញ្ជី",
    grid: "ក្រឡា",
    allStatus: "ស្ថានភាពទាំងអស់",
    type: "ប្រភេទ",
    user: "អ្នកប្រើ",
    users: "អ្នកប្រើ",
    yes: "មាន",
    no: "គ្មាន",
    active: "សកម្ម",
    inactive: "អសកម្ម",
    status: "ស្ថានភាព",
    logo: "និមិត្តសញ្ញា",
    stakeholderName: "ឈ្មោះភាគីពាក់ព័ន្ធ",
    relatedTo: "ទាក់ទងនឹង",
    coChair: "សហប្រធាន",
    coChairPlaceholder: "បញ្ចូលឈ្មោះសហប្រធាន",
    coChairMaxLength: "ឈ្មោះសហប្រធានមិនត្រូវលើសពី ១៥០ តួអក្សរ។",
    nameMaxLength: "ឈ្មោះភាគីពាក់ព័ន្ធមិនត្រូវលើសពី ២៥៥ តួអក្សរ។",
    descriptionLabel: "ការពិពណ៌នា",
    created: "បានបង្កើត",
    lastUpdate: "ធ្វើបច្ចុប្បន្នភាពចុងក្រោយ",
    noCol: "ល.រ",
    empty: "រកមិនឃើញភាគីពាក់ព័ន្ធទេ។",
    view: "មើល",
    addUser: "បន្ថែមអ្នកប្រើ",
    edit: "កែសម្រួល",
    delete: "លុប",
    close: "បិទ",
    cancel: "បោះបង់",
    save: "រក្សាទុក",
    saveChanges: "រក្សាទុកការផ្លាស់ប្តូរ",
    saving: "កំពុងរក្សាទុក...",
    uploading: "ផ្ទុកឡើង",
    change: "ប្តូរ",
    totalStakeholders: "ភាគីពាក់ព័ន្ធសរុប",
    ministry: "ក្រសួង",
    privateSector: "ផ្នែកឯកជន",
    stakeholderType: "ប្រភេទភាគីពាក់ព័ន្ធ",
    relatedStakeholder: "ភាគីពាក់ព័ន្ធទាក់ទង",
    noRelatedStakeholder: "គ្មានភាគីពាក់ព័ន្ធទាក់ទង",
    stakeholderLogo: "និមិត្តសញ្ញាភាគីពាក់ព័ន្ធ",
    logoHint: "PNG, JPG, WEBP ឬ SVG · អតិបរមា ៥ MB",
    namePlaceholder:"ឈ្មោះស្ថាប័ន",
    descriptionPlaceholder: "សរសេរការពិពណ៌នាភាគីពាក់ព័ន្ធ",
    selectType: "ជ្រើសរើសប្រភេទ",
    selectStatus: "ជ្រើសរើសស្ថានភាព",
    selectRelated: "ជ្រើសរើសភាគីពាក់ព័ន្ធទាក់ទង",
    loadingTypes: "កំពុងផ្ទុកប្រភេទភាគីពាក់ព័ន្ធ",
    loadingStakeholders: "កំពុងផ្ទុកភាគីពាក់ព័ន្ធ",
    logoImageError: "និមិត្តសញ្ញាត្រូវតែជារូបភាព (PNG, JPG, WEBP ឬ SVG)។",
    logoSizeError: "ឯកសារនិមិត្តសញ្ញាត្រូវមានទំហំ ៥ MB ឬតូចជាង។",
    nameRequired: "តម្រូវឱ្យបំពេញ។",
    typeRequired: "សូមជ្រើសរើសប្រភេទ។",
    relatedInvalid: "សូមជ្រើសរើសភាគីពាក់ព័ន្ធទាក់ទងដែលត្រឹមត្រូវ។",
    relatedSelf: "ភាគីពាក់ព័ន្ធមិនអាចទាក់ទងនឹងខ្លួនឯងបានទេ។",
    deleteTitle: "លុបភាគីពាក់ព័ន្ធ",
    deleteBody: (name: string) =>
      `តើអ្នកប្រាកដថាចង់លុប ${name} ឬ? វានឹងត្រូវដកចេញពីបញ្ជីភាគីពាក់ព័ន្ធសកម្ម។`,
    thisStakeholder: "ភាគីពាក់ព័ន្ធនេះ",
    deleting: "កំពុងលុប...",
    addUserTitle: "បន្ថែមអ្នកប្រើទៅភាគីពាក់ព័ន្ធ",
    selectUser: "ជ្រើសរើសអ្នកប្រើ",
    selectUserRequired: "សូមជ្រើសរើសអ្នកប្រើ។",
    adding: "កំពុងបន្ថែម...",
    addUserSubmit: "បន្ថែមអ្នកប្រើ",
    allUsersAdded: "អ្នកប្រើទាំងអស់ត្រូវបានបន្ថែមទៅភាគីពាក់ព័ន្ធនេះហើយ។",
    noUsersAdded: "មិនមានអ្នកប្រើបន្ថែមទៅភាគីពាក់ព័ន្ធនេះទេ។",
    userCount: (count: number) => `${count} នាក់`,
    userFallback: (id: string | number) => `អ្នកប្រើ #${id}`,
    createdSuccess: "បានបង្កើតភាគីពាក់ព័ន្ធដោយជោគជ័យ។",
    updatedSuccess: "បានធ្វើបច្ចុប្បន្នភាពភាគីពាក់ព័ន្ធដោយជោគជ័យ។",
    deletedSuccess: "បានលុបភាគីពាក់ព័ន្ធដោយជោគជ័យ។",
    userAddedSuccess: "បានបន្ថែមអ្នកប្រើទៅភាគីពាក់ព័ន្ធ។",
    createError: "មិនអាចបង្កើតភាគីពាក់ព័ន្ធបានទេ។",
    updateError: "មិនអាចធ្វើបច្ចុប្បន្នភាពភាគីពាក់ព័ន្ធបានទេ។",
    deleteError: "មិនអាចលុបភាគីពាក់ព័ន្ធបានទេ។",
    addUserError: "មិនអាចបន្ថែមអ្នកប្រើទៅភាគីពាក់ព័ន្ធបានទេ។",
    loadError: "មិនអាចផ្ទុកភាគីពាក់ព័ន្ធបានទេ។",
    loadDetailError: "មិនអាចផ្ទុកព័ត៌មានលម្អិតភាគីពាក់ព័ន្ធបានទេ។",
    loadUsersError: "មិនអាចផ្ទុកអ្នកប្រើសម្រាប់ភាគីពាក់ព័ន្ធនេះបានទេ។",
  },
} as const;

export function getStakeholderText(language?: string | null) {
  return stakeholderI18n[normalizeStakeholderLanguage(language)];
}

export type StakeholderText = (typeof stakeholderI18n)[StakeholderLanguage];

export function translateStakeholderTypeName(
  name: string,
  t: StakeholderText,
) {
  const key = name.trim().toLowerCase();

  if (key === "ministry") return t.ministry;
  if (key === "private sector") return t.privateSector;

  return name;
}
