import type { BlogPageFormStateShape } from "@/lib/pages/blog/form-types"
import type { BlogPageLocaleCode } from "@/lib/pages/blog/locales"

/**
 * Per-locale: stored image URL, or (for tr/ar) English image when the locale has no own URL.
 */
export function resolveBlogPageHeroImageUrl(
  storedImage: string,
  defaultImage: string,
  locale: string
): string {
  const stored = (storedImage ?? "").trim()
  if (stored) return stored
  if (locale === "en") return ""
  return (defaultImage ?? "").trim()
}

export function resolveBlogPageDefaultImage(
  locales: Partial<Record<BlogPageLocaleCode, BlogPageFormStateShape | 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 buildBlogPageImageByLocale(
  locales: Partial<Record<BlogPageLocaleCode, BlogPageFormStateShape | undefined>>
): Record<BlogPageLocaleCode, string> {
  const defaultImage = resolveBlogPageDefaultImage(locales)
  return {
    en: resolveBlogPageHeroImageUrl(locales.en?.hero?.image ?? "", defaultImage, "en"),
    tr: resolveBlogPageHeroImageUrl(locales.tr?.hero?.image ?? "", defaultImage, "tr"),
    ar: resolveBlogPageHeroImageUrl(locales.ar?.hero?.image ?? "", defaultImage, "ar"),
  }
}

/**
 * Removes duplicated per-locale image values when they match the shared default image.
 * Default image is persisted on English; tr/ar keep only real overrides.
 */
export function normalizeBlogPageLocaleImagesForStorage(
  locales: Partial<Record<BlogPageLocaleCode, BlogPageFormStateShape | undefined>>
): Partial<Record<BlogPageLocaleCode, BlogPageFormStateShape>> {
  const next: Partial<Record<BlogPageLocaleCode, BlogPageFormStateShape>> = {}
  for (const code of ["en", "tr", "ar"] as const) {
    const chunk = locales[code]
    if (!chunk) continue
    next[code] = {
      hero: {
        ...chunk.hero,
        image: (chunk.hero.image ?? "").trim(),
        imagePublicId: (chunk.hero.imagePublicId ?? "").trim(),
      },
    }
  }

  const defaultImage = resolveBlogPageDefaultImage(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
}
