// Mapper de la vue monolithique src/views/GuideCoolRoof.tsx.
// Rows WP de page--guide-cool-roof : hero (stats = proof bar, badges =
// réassurances), 2 composant_react `formulaire_hubspot` (par position),
// grille_cards "bénéfices", texte_image "téléchargement", cta banner.
// Icônes reprises de l'original par position ; valeur absente => undefined.

import {
  BadgeCheck,
  Building2,
  ShieldCheck,
  Snowflake,
  Sparkles,
  ThermometerSun,
} from "lucide-react";
import { arr, mapImage } from "../mappers";
import type {
  ComposantReactBlock,
  CtaBlock,
  GrilleCardsBlock,
  HeroBlock,
  TexteImageBlock,
  WpSection,
} from "../types";
import type {
  GuideBenefit,
  GuideCoolRoofProps,
  GuideProofStat,
  GuideReassurance,
} from "@/views/GuideCoolRoof";
import { byLayout, nthLayout, plainTitle, stripHtml, u } from "./shared";
import { mapHubspotFormConfig } from "./hubspot";

/** Icônes des cards "bénéfices" de l'original, par position. */
const BENEFIT_ICONS = [ThermometerSun, Snowflake, Building2];

/** Icônes des réassurances de l'original, par position. */
const REASSURANCE_ICONS = [BadgeCheck, Sparkles, ShieldCheck];

export function mapGuideCoolRoofProps(sections: WpSection[]): GuideCoolRoofProps {
  const hero = nthLayout<HeroBlock>(sections, "HeroLayout");
  const formulaires = byLayout<ComposantReactBlock>(sections, "ComposantReactLayout").filter(
    (c) => c.composant === "formulaire_hubspot",
  );
  const [formHero, formDetails] = formulaires;
  const grille = nthLayout<GrilleCardsBlock>(sections, "GrilleCardsLayout");
  const tel = nthLayout<TexteImageBlock>(sections, "TexteImageLayout");
  const cta = nthLayout<CtaBlock>(sections, "CtaLayout");

  const stats = arr(hero?.stats);
  const proofStats: GuideProofStat[] | undefined = stats.length
    ? stats.map((s) => ({ value: s?.value ?? "", label: s?.label ?? "" }))
    : undefined;

  const badges = arr(hero?.badges);
  const reassurances: GuideReassurance[] | undefined = badges.length
    ? badges.map((b, i) => ({
        icon: REASSURANCE_ICONS[i] ?? BadgeCheck,
        label: b?.texte ?? "",
      }))
    : undefined;

  const cards = arr(grille?.cards);
  const benefits: GuideBenefit[] | undefined = cards.length
    ? cards.map((card, i) => ({
        icon: BENEFIT_ICONS[i] ?? ThermometerSun,
        title: plainTitle(card?.titre) ?? "",
        text: stripHtml(card?.texte) ?? "",
      }))
    : undefined;

  const telListe = arr(tel?.liste)
    .map((item) => item?.texte ?? "")
    .filter(Boolean);

  const heroImage = mapImage(hero?.image);
  const telImage = mapImage(tel?.image);

  return {
    heroEyebrow: u(hero?.eyebrow),
    heroTitre: plainTitle(hero?.titre),
    heroImage: heroImage?.sourceUrl,
    heroImageAlt: u(heroImage?.altText),
    heroLegende: stripHtml(hero?.lead),
    formTitre: u(formHero?.titre),
    formId: u(formHero?.hubspotFormId) ?? u(formDetails?.hubspotFormId),
    hubspotForm: mapHubspotFormConfig(
      formHero?.formulaireHubspot ?? formDetails?.formulaireHubspot,
      formHero?.hubspotFormId ?? formDetails?.hubspotFormId,
    ),
    reassurances,
    proofStats,
    benefits,
    telBadge: u(tel?.entete?.badge),
    telTitre: plainTitle(tel?.entete?.titre),
    telIntro: stripHtml(tel?.contenu),
    telListe: telListe.length ? telListe : undefined,
    telImage: telImage?.sourceUrl,
    telImageAlt: u(telImage?.altText),
    form2Titre: u(formDetails?.titre),
    ctaTitre: plainTitle(cta?.titre),
    ctaTexte: stripHtml(cta?.texte),
    ctaLabel: u(cta?.ctaPrimaire?.label),
    ctaHref: u(cta?.ctaPrimaire?.lien),
  };
}
