// Mapper de la vue monolithique src/views/SimulateurEconomieEnergie.tsx.
// Rows WP de page--simulateur-economie-energie : hero, composant_react
// `simulateur_energie` (titre + form id), grille_cards "outil", texte_image
// "calculateur web" (liste = données utiles), cta banner. Icônes des cards
// reprises de l'original par position ; valeur absente => undefined.

import { BarChart3, Euro, Snowflake } from "lucide-react";
import { arr, mapImage } from "../mappers";
import type {
  ComposantReactBlock,
  CtaBlock,
  GrilleCardsBlock,
  HeroBlock,
  TexteImageBlock,
  WpSection,
} from "../types";
import type {
  SimulateurEconomieEnergieProps,
  SimulateurOutilCard,
} from "@/views/SimulateurEconomieEnergie";
import { byLayout, nthLayout, plainTitle, stripHtml, u } from "./shared";
import { mapHubspotFormConfig } from "./hubspot";

/** Icônes des cards "outil" de l'original, par position. */
const OUTIL_ICONS = [Snowflake, Euro, BarChart3];

export function mapSimulateurEconomieEnergieProps(
  sections: WpSection[],
): SimulateurEconomieEnergieProps {
  const hero = nthLayout<HeroBlock>(sections, "HeroLayout");
  const simulateur = byLayout<ComposantReactBlock>(sections, "ComposantReactLayout").find(
    (c) => c.composant === "simulateur_energie",
  );
  const grille = nthLayout<GrilleCardsBlock>(sections, "GrilleCardsLayout");
  const details = nthLayout<TexteImageBlock>(sections, "TexteImageLayout");
  const cta = nthLayout<CtaBlock>(sections, "CtaLayout");

  const grilleCards = arr(grille?.cards);
  const outilCards: SimulateurOutilCard[] | undefined = grilleCards.length
    ? grilleCards.map((card, i) => ({
        icon: OUTIL_ICONS[i] ?? Snowflake,
        title: plainTitle(card?.titre) ?? "",
        text: stripHtml(card?.texte) ?? "",
      }))
    : undefined;

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

  const heroImage = mapImage(hero?.image);
  const detailsImage = mapImage(details?.image);

  return {
    heroBadge: u(hero?.eyebrow),
    heroTitre: plainTitle(hero?.titre),
    heroIntro: stripHtml(hero?.lead),
    heroCtaLabel: u(hero?.ctaPrimaire?.label),
    heroCtaHref: u(hero?.ctaPrimaire?.lien),
    heroSecondaireLabel: u(hero?.ctaSecondaire?.label),
    heroSecondaireHref: u(hero?.ctaSecondaire?.lien),
    heroImage: heroImage?.sourceUrl,
    heroImageAlt: u(heroImage?.altText),
    formTitre: u(simulateur?.titre),
    formId: u(simulateur?.hubspotFormId),
    hubspotForm: mapHubspotFormConfig(simulateur?.formulaireHubspot, simulateur?.hubspotFormId),
    outilBadge: u(grille?.entete?.badge),
    outilTitre: plainTitle(grille?.entete?.titre),
    outilIntro: stripHtml(grille?.entete?.intro),
    outilCards,
    detailsBadge: u(details?.entete?.badge),
    detailsTitre: plainTitle(details?.entete?.titre),
    detailsIntro: stripHtml(details?.contenu),
    inputsLabel: u(details?.note),
    inputs: liste.length ? liste : undefined,
    detailsImage: detailsImage?.sourceUrl,
    detailsImageAlt: u(detailsImage?.altText),
    detailsFormTitre: u(simulateur?.titre),
    ctaTitre: plainTitle(cta?.titre),
    ctaTexte: stripHtml(cta?.texte),
    ctaLabel: u(cta?.ctaPrimaire?.label),
    ctaHref: u(cta?.ctaPrimaire?.lien),
  };
}
