import enMessages from "@/locales/en.json"
import guMessages from "@/locales/gu.json"
import hiMessages from "@/locales/hi.json"

type ExtraTranslationKeys =
  | "home.firstPayment.warningTitle"
  | "home.firstPayment.warningEnglish"
  | "home.firstPayment.warningGujarati"

export type AppLanguage = "en" | "gu" | "hi"

export const DEFAULT_LANGUAGE: AppLanguage = "en"
export const LANGUAGE_STORAGE_KEY = "preferredLanguage"

export const SUPPORTED_LANGUAGES: AppLanguage[] = ["en", "gu", "hi"]

const BACKEND_TO_APP_LANGUAGE: Record<string, AppLanguage> = {
  ENGLISH: "en",
  GUJARATI: "gu",
  HINDI: "hi",
}

const APP_TO_BACKEND_LANGUAGE: Record<AppLanguage, "ENGLISH" | "GUJARATI" | "HINDI"> = {
  en: "ENGLISH",
  gu: "GUJARATI",
  hi: "HINDI",
}

export const toAppLanguage = (value: unknown): AppLanguage | null => {
  if (typeof value !== "string") return null
  const trimmed = value.trim()
  if (!trimmed) return null

  const lowered = trimmed.toLowerCase()
  if (lowered === "en" || lowered === "english") return "en"
  if (lowered === "gu" || lowered === "gujarati") return "gu"
  if (lowered === "hi" || lowered === "hindi") return "hi"

  const mapped = BACKEND_TO_APP_LANGUAGE[trimmed.toUpperCase()]
  return mapped || null
}

export const toBackendLanguage = (language: AppLanguage): "ENGLISH" | "GUJARATI" | "HINDI" => {
  return APP_TO_BACKEND_LANGUAGE[language]
}

export type TranslationKey = keyof typeof messages.en | ExtraTranslationKeys

export const messages = {
  en: enMessages,
  gu: guMessages,
  hi: hiMessages,
} as const

export const formatMessage = (template: string, params: Record<string, string | number>): string => {
  return Object.entries(params).reduce((result, [key, value]) => {
    return result.replace(new RegExp(`\\{${key}\\}`, "g"), String(value))
  }, template)
}
