import type { ContactUsPageFormStateShape } from "@/lib/pages/contact-us/form-types"
import type { ContactUsPageLocaleCode } from "@/lib/pages/contact-us/locales"

export function resolveContactUsPageHeroImageUrl(
  storedImage: string,
  defaultImage: string,
  locale: string
): string {
  const stored = (storedImage ?? "").trim()
  if (stored) return stored
  if (locale === "en") return ""
  return (defaultImage ?? "").trim()
}

export function resolveContactUsPageDefaultImage(
  locales: Partial<Record<ContactUsPageLocaleCode, ContactUsPageFormStateShape | undefined>>
): string {
  const en = (locales.en?.hero?.image ?? "").trim()
  if (en) return en
  const tr = (locales.tr?.hero?.image ?? "").trim()
  if (tr) return tr
  return (locales.ar?.hero?.image ?? "").trim()
}

export function buildContactUsPageImageByLocale(
  locales: Partial<Record<ContactUsPageLocaleCode, ContactUsPageFormStateShape | undefined>>
): Record<ContactUsPageLocaleCode, string> {
  const defaultImage = resolveContactUsPageDefaultImage(locales)
  return {
    en: resolveContactUsPageHeroImageUrl(locales.en?.hero?.image ?? "", defaultImage, "en"),
    tr: resolveContactUsPageHeroImageUrl(locales.tr?.hero?.image ?? "", defaultImage, "tr"),
    ar: resolveContactUsPageHeroImageUrl(locales.ar?.hero?.image ?? "", defaultImage, "ar"),
  }
}

export function normalizeContactUsPageLocaleImagesForStorage(
  locales: Partial<Record<ContactUsPageLocaleCode, ContactUsPageFormStateShape | undefined>>
): Partial<Record<ContactUsPageLocaleCode, ContactUsPageFormStateShape>> {
  const next: Partial<Record<ContactUsPageLocaleCode, ContactUsPageFormStateShape>> = {}
  for (const code of ["en", "tr", "ar"] as const) {
    const chunk = locales[code]
    if (!chunk) continue
    next[code] = {
      ...chunk,
      hero: {
        ...chunk.hero,
        image: (chunk.hero.image ?? "").trim(),
        imagePublicId: (chunk.hero.imagePublicId ?? "").trim(),
      },
    }
  }

  const defaultImage = resolveContactUsPageDefaultImage(next)
  if (next.en) {
    next.en.hero.image = defaultImage
  }
  for (const code of ["tr", "ar"] as const) {
    const chunk = next[code]
    if (!chunk) continue
    if ((chunk.hero.image ?? "").trim() === defaultImage) {
      chunk.hero.image = ""
      chunk.hero.imagePublicId = ""
    }
  }
  return next
}
