import { PROCEDURE_LOCALES, type ProcedureLocale } from "@/lib/procedure-db"

export type CtaFeatureDefault = { text: string }

/** Section Content fields inside procedure CTA (eyebrow, copy, features, main CTA button). */
export type ProcedureCtaSectionContentDefaults = {
  eyebrow: string
  title: string
  subtitle: string
  features: CtaFeatureDefault[]
  buttonIconKey: string
  buttonTitle: string
  buttonSubtitle: string
  buttonLink: string
}

/** Contact Form fields inside procedure CTA. */
export type ProcedureCtaContactFormDefaults = {
  formTitle: string
  formSubtitle: string
  formFullNameLabel: string
  formPhoneLabel: string
  formEmailLabel: string
  formProcedureLabel: string
  formMessageLabel: string
  formEndLabel: string
  formButtonIconKey: string
  formButtonText: string
  formButtonLink: string
}

export const PROCEDURE_CTA_SECTION_CONTENT_STRING_KEYS = [
  "eyebrow",
  "title",
  "subtitle",
  "buttonIconKey",
  "buttonTitle",
  "buttonSubtitle",
  "buttonLink",
] as const satisfies ReadonlyArray<keyof ProcedureCtaSectionContentDefaults>

export const PROCEDURE_CTA_CONTACT_FORM_STRING_KEYS = [
  "formTitle",
  "formSubtitle",
  "formFullNameLabel",
  "formPhoneLabel",
  "formEmailLabel",
  "formProcedureLabel",
  "formMessageLabel",
  "formEndLabel",
  "formButtonIconKey",
  "formButtonText",
  "formButtonLink",
] as const satisfies ReadonlyArray<keyof ProcedureCtaContactFormDefaults>

const SECTION_CONTENT_BY_LOCALE: Record<ProcedureLocale, ProcedureCtaSectionContentDefaults> = {
  en: {
    eyebrow: "Ready to Start?",
    title: "Get a Free Consultation",
    subtitle: "Our team is ready to help",
    features: [
      { text: "Free initial consultation" },
      { text: "Personalized treatment plan" },
      { text: "24/7 patient support" },
    ],
    buttonIconKey: "whatsapp",
    buttonTitle: "Get in Touch",
    buttonSubtitle: "Free consultation",
    buttonLink: "/contact",
  },
  ar: {
    eyebrow: "هل أنت مستعد للبدء؟",
    title: "احصل على استشارة مجانية",
    subtitle: "فريقنا جاهز لمساعدتك",
    features: [
      { text: "استشارة أولية مجانية" },
      { text: "خطة علاج مخصصة" },
      { text: "دعم للمرضى على مدار الساعة" },
    ],
    buttonIconKey: "whatsapp",
    buttonTitle: "تواصل معنا",
    buttonSubtitle: "استشارة مجانية",
    buttonLink: "/contact",
  },
  tr: {
    eyebrow: "Başlamaya Hazır mısınız?",
    title: "Ücretsiz Danışmanlık Alın",
    subtitle: "Ekibimiz size yardımcı olmaya hazır",
    features: [
      { text: "Ücretsiz ilk danışmanlık" },
      { text: "Kişiselleştirilmiş tedavi planı" },
      { text: "7/24 hasta desteği" },
    ],
    buttonIconKey: "whatsapp",
    buttonTitle: "İletişime Geçin",
    buttonSubtitle: "Ücretsiz danışmanlık",
    buttonLink: "/contact",
  },
}

const CONTACT_FORM_BY_LOCALE: Record<ProcedureLocale, ProcedureCtaContactFormDefaults> = {
  en: {
    formTitle: "Get a Free Quote",
    formSubtitle: "Fill in your details",
    formFullNameLabel: "Full Name",
    formPhoneLabel: "Phone Number",
    formEmailLabel: "Email Address",
    formProcedureLabel: "Procedure of Interest",
    formMessageLabel: "Your Message",
    formEndLabel: "We'll respond within 24 hours",
    formButtonIconKey: "send",
    formButtonText: "Send Request",
    formButtonLink: "/contact",
  },
  ar: {
    formTitle: "احصل على عرض مجاني",
    formSubtitle: "املأ بياناتك وسنتواصل معك",
    formFullNameLabel: "الاسم الكامل",
    formPhoneLabel: "رقم الهاتف",
    formEmailLabel: "البريد الإلكتروني",
    formProcedureLabel: "الإجراء المطلوب",
    formMessageLabel: "رسالتك",
    formEndLabel: "سنرد عليك خلال 24 ساعة",
    formButtonIconKey: "send",
    formButtonText: "إرسال الطلب",
    formButtonLink: "/contact",
  },
  tr: {
    formTitle: "Ücretsiz Teklif Alın",
    formSubtitle: "Bilgilerinizi doldurun",
    formFullNameLabel: "Ad Soyad",
    formPhoneLabel: "Telefon Numarası",
    formEmailLabel: "E-posta Adresi",
    formProcedureLabel: "İlgilendiğiniz İşlem",
    formMessageLabel: "Mesajınız",
    formEndLabel: "24 saat içinde yanıt vereceğiz",
    formButtonIconKey: "send",
    formButtonText: "Talep Gönder",
    formButtonLink: "/contact",
  },
}

function parseTrimmedString(value: unknown): string {
  return typeof value === "string" ? value.trim() : ""
}

function ctaFeaturesNeedDefaults(features: unknown): boolean {
  if (!Array.isArray(features) || features.length === 0) return true
  return features.every((item) => {
    if (!item || typeof item !== "object") return true
    return !parseTrimmedString((item as { text?: unknown }).text)
  })
}

function normalizeCtaFeatures(features: unknown): CtaFeatureDefault[] {
  if (!Array.isArray(features)) return []
  return features
    .map((item) => {
      if (!item || typeof item !== "object") return { text: "" }
      return { text: parseTrimmedString((item as { text?: unknown }).text) }
    })
    .filter((item) => item.text !== "")
}

export function getProcedureCtaSectionContentDefaults(locale: ProcedureLocale): ProcedureCtaSectionContentDefaults {
  return {
    ...SECTION_CONTENT_BY_LOCALE[locale],
    features: SECTION_CONTENT_BY_LOCALE[locale].features.map((f) => ({ ...f })),
  }
}

export function getProcedureCtaContactFormDefaults(locale: ProcedureLocale): ProcedureCtaContactFormDefaults {
  return { ...CONTACT_FORM_BY_LOCALE[locale] }
}

/** Removes deprecated CTA keys before persistence or public API responses. */
export function stripRemovedProcedureCtaFields(cta: unknown): Record<string, unknown> {
  const out =
    cta && typeof cta === "object" && !Array.isArray(cta)
      ? { ...(cta as Record<string, unknown>) }
      : {}
  delete out.formProcedureOptions
  return out
}

/** Fills empty Section Content + Contact Form fields; strips removed legacy keys. */
export function applyProcedureCtaDefaults(cta: unknown, locale: ProcedureLocale): Record<string, unknown> {
  const src = cta && typeof cta === "object" && !Array.isArray(cta) ? (cta as Record<string, unknown>) : {}
  const sectionDefaults = getProcedureCtaSectionContentDefaults(locale)
  const contactDefaults = getProcedureCtaContactFormDefaults(locale)
  const out: Record<string, unknown> = { ...src }

  for (const key of PROCEDURE_CTA_SECTION_CONTENT_STRING_KEYS) {
    if (!parseTrimmedString(out[key])) {
      out[key] = sectionDefaults[key]
    }
  }

  if (ctaFeaturesNeedDefaults(out.features)) {
    out.features = sectionDefaults.features.map((f) => ({ ...f }))
  } else {
    out.features = normalizeCtaFeatures(out.features)
  }

  for (const key of PROCEDURE_CTA_CONTACT_FORM_STRING_KEYS) {
    if (!parseTrimmedString(out[key])) {
      out[key] = contactDefaults[key]
    }
  }

  return stripRemovedProcedureCtaFields(out)
}

/** @deprecated Use {@link applyProcedureCtaDefaults} */
export const applyProcedureCtaContactFormDefaults = applyProcedureCtaDefaults

/** Applies CTA defaults (Section Content + Contact Form) for every procedure locale. */
export function applyProcedureTranslationsCtaDefaults(
  translations: Record<string, unknown>
): Record<string, unknown> {
  const out: Record<string, unknown> = { ...translations }

  for (const locale of PROCEDURE_LOCALES) {
    const rawLocale = out[locale]
    if (!rawLocale || typeof rawLocale !== "object" || Array.isArray(rawLocale)) continue
    const localeRecord = { ...(rawLocale as Record<string, unknown>) }
    localeRecord.cta = applyProcedureCtaDefaults(localeRecord.cta, locale)
    out[locale] = localeRecord
  }

  return out
}

/** @deprecated Use {@link applyProcedureTranslationsCtaDefaults} */
export const applyProcedureTranslationsCtaContactFormDefaults = applyProcedureTranslationsCtaDefaults
