import type { ZoneData } from '@/data/zones';
import type { SEOTemplate } from './template';
import { zoneInPhrase, zoneInPhraseCap, zoneName } from '@/lib/zoneGeo';

type ZoneContent = NonNullable<ZoneData['content']>;

/**
 * Générateur de contenu SEO data-driven pour les pages locales SANS texte rédigé à la main.
 *
 * Objectif : un dossier riche, expert et NON redondant entre villes — chaque page s'appuie sur
 * ses vraies données (jours >30 °C actuels/projetés Explore2, température estivale, pic, zone
 * climatique réglementaire, type d'activité, villes voisines). Les pages rédigées à la main
 * (zoneData.seoContent) priment toujours sur ce générateur.
 */

// --- helpers ---
const round = (n: number) => Math.round(n);
const dec = (n: number) => n.toFixed(1).replace('.', ',');

/** Choix déterministe (stable par slug) pour varier les tournures sans aléatoire. */
function pick<T>(seed: string, salt: number, arr: T[]): T {
  let h = salt >>> 0;
  for (let i = 0; i < seed.length; i++) h = (Math.imul(h, 31) + seed.charCodeAt(i)) >>> 0;
  return arr[h % arr.length];
}

/** Cadrage climatique selon la zone réglementaire H1/H2/H3. */
function climateFraming(hz: string): { label: string; trait: string; durab: string } {
  if (hz === 'H3')
    return {
      label: 'zone climatique H3, la plus chaude de France',
      trait:
        'un ensoleillement méditerranéen intense, des étés secs et des nuits tropicales de plus en plus fréquentes',
      durab:
        'résistance aux UV prolongés et à la chaleur estivale soutenue, là où les peintures acryliques se dégradent en quelques saisons',
    };
  if (hz === 'H2')
    return {
      label: 'zone climatique H2',
      trait:
        'un climat océanique ou de transition, où les vagues de chaleur estivales gagnent en intensité et en durée',
      durab: 'tenue aux alternances d’humidité et de fortes chaleurs caractéristiques de la façade atlantique et du centre',
    };
  return {
    label: 'zone climatique H1, la plus exigeante du pays en amplitude thermique',
    trait: 'des hivers froids et des étés de plus en plus caniculaires',
    durab: 'résistance aux cycles gel-dégel hivernaux comme aux pics de chaleur estivaux',
  };
}

/** Descripteur de secteur à partir du champ typeZone (multi-mots possibles). */
function sectorParagraph(typeZone: string, name: string): string {
  const t = (typeZone || '').toLowerCase();
  const parts: string[] = [];
  if (/logistiqu|entrep|fret/.test(t))
    parts.push(
      'les entrepôts et plateformes de distribution alignent des toitures bac acier de 5 000 à 50 000 m², où la chaîne du froid et le confort des opérateurs dépendent directement de la température sous toiture',
    );
  if (/a[ée]roport|tarmac/.test(t))
    parts.push(
      'les hangars de fret et terminaux subissent l’effet tarmac, qui cumule rayonnement direct et chaleur réverbérée par les pistes',
    );
  if (/portuaire|maritime/.test(t))
    parts.push(
      'les hangars et terminaux portuaires offrent des hectares de bac acier exposés sans le moindre ombrage',
    );
  if (/industri|chimie|p[ée]trochimie|m[ée]tallurg|m[ée]canique|plasturg|nucl[ée]aire|sid[ée]rurg/.test(t))
    parts.push(
      'les sites de production ajoutent la chaleur de process à la surchauffe solaire, fragilisant équipements et conditions de travail',
    );
  if (/tertiaire|bureau/.test(t))
    parts.push(
      'les immeubles tertiaires concentrent sur leurs toitures-terrasses les équipements de climatisation, dont le rendement chute quand la membrane atteint 70 °C',
    );
  if (/agroaliment|viticole|cosm[ée]tique|pharma/.test(t))
    parts.push(
      'les sites agroalimentaires et pharmaceutiques imposent une stabilité thermique stricte que la surchauffe de toiture met à mal',
    );
  if (/horlog|microtech|[ée]lectroniqu|semi/.test(t))
    parts.push(
      'les ateliers de précision et salles techniques exigent une température maîtrisée, mise sous pression par le rayonnement estival',
    );
  if (parts.length === 0)
    parts.push(
      `les bâtiments professionnels ${zoneInPhrase({ pageType: 'ville', ville: name } as ZoneData)} présentent de grandes toitures planes, premières exposées au rayonnement`,
    );
  return parts.slice(0, 2).join(' ; et ');
}

/** Adjectif de secteur pour les titres (« logistiques », « industrielles »…). */
function sectorAdj(typeZone: string): string {
  const t = (typeZone || '').toLowerCase();
  if (/logistiqu|entrep|fret/.test(t)) return 'logistiques';
  if (/portuaire|maritime/.test(t)) return 'portuaires';
  if (/a[ée]roport/.test(t)) return 'aéroportuaires';
  if (/tertiaire|bureau/.test(t)) return 'tertiaires';
  if (/agroaliment|viticole/.test(t)) return 'agroalimentaires';
  if (/industri|chimie|p[ée]tro|m[ée]tallurg|m[ée]canique|plasturg|nucl[ée]aire|sid[ée]rurg|pneumat|[ée]lectro|semi|horlog|microtech|cosm[ée]tique|pharma|a[ée]ronaut|spatial|d[ée]fense/.test(t))
    return 'industrielles';
  return 'professionnelles';
}

/** Angle climatique pour les titres, selon la zone réglementaire. */
function climatAngle(hz: string): string {
  if (hz === 'H3') return 'un climat méditerranéen de plus en plus brûlant';
  if (hz === 'H2') return 'des étés qui se réchauffent vite';
  if (hz === 'H1') return 'des étés de plus en plus caniculaires';
  return 'la surchauffe estivale';
}

export function buildSeoContent(zone: ZoneData): SEOTemplate {
  const slug = zone.slugVille ?? zone.slugDepartement ?? zone.slugRegion ?? 'x';
  const name = zoneName(zone);
  const inPhrase = zoneInPhrase(zone); // « à Roissy » / « dans le Rhône » / « en Occitanie »
  const inCap = zoneInPhraseCap(zone);
  const isFR = (zone.pays ?? 'FR') === 'FR';
  const isDepartement = zone.pageType === 'departement';
  const hasData = isFR && zone.joursSup30C > 0;
  const cf = climateFraming(zone.zoneClimatiqueCEE || zone.zoneClimatique);
  const j0 = round(zone.joursSup30C);
  const j20 = round(zone.joursSup30C20ans);
  const delta = j20 - j0;
  const red = round(zone.reductionSousToiture);
  const secteur = sectorParagraph(zone.typeZone, name);
  const proches = (zone.maillage ?? []).slice(0, 3).map((v) => v.nom);
  const villesRepere = (zone.villesDepartement ?? []).slice(0, 3).map((v) => v.nom);

  // --- H2 : spécifique (secteur réel + angle climatique de la zone), non générique ---
  const adj = sectorAdj(zone.typeZone);
  const angle = climatAngle(zone.zoneClimatiqueCEE || zone.zoneClimatique);
  const h2 = isDepartement
    ? pick(slug, 1, [
        `Cool roof ${inPhrase} : planifier le traitement des toitures ${adj} du département`,
        `Cool roof ${inPhrase} : prioriser les bâtiments ${adj} les plus exposés`,
        `Peinture cool roof ${inPhrase} : un déploiement départemental contre ${angle}`,
      ])
    : pick(slug, 1, [
        `Cool roof ${inPhrase} : protéger les toitures ${adj} face à ${angle}`,
        `Cool roof ${inPhrase} : la peinture réflective qui protège durablement les toitures ${adj}`,
        `Peinture cool roof ${inPhrase} : jusqu’à ${red} °C de moins sous vos toitures ${adj}`,
      ]);

  // --- intro ---
  const lowHeat = hasData && j0 < 8; // villes tempérées (Nord, littoral, montagne) : recentrer sur la T° de surface
  const opener = isDepartement
    ? pick(slug, 2, [
        `${inCap}, le sujet n’est pas un bâtiment isolé : c’est un parc entier de toitures à hiérarchiser.`,
        `${inCap}, la question cool roof se traite à l’échelle des zones d’activité, des entrepôts et des sites tertiaires.`,
      ])
    : lowHeat
    ? pick(slug, 2, [
        `${inCap}, on imagine mal une toiture devenir un problème thermique — et pourtant.`,
        `Même sous le climat tempéré qui prévaut ${inPhrase}, les toitures professionnelles surchauffent l’été.`,
      ])
    : pick(slug, 2, [
        `${inCap}, la surchauffe estivale des toitures n’est plus un aléa ponctuel mais une contrainte structurelle.`,
        `Protéger une toiture professionnelle ${inPhrase} est devenu un enjeu énergétique et opérationnel.`,
        `${inCap}, les bâtiments d’activité affrontent chaque été des toitures qui dépassent 70 °C.`,
      ]);
  const climClause = isDepartement
    ? hasData
      ? `Le département enregistre déjà près de ${j0} journées au-dessus de 30 °C par an, avec des écarts forts entre zones urbaines, plateformes logistiques et secteurs plus ouverts`
      : `Le département regroupe des sites professionnels exposés à des étés de plus en plus chauds, avec des toitures bac acier qui dépassent 70 °C en surface`
    : lowHeat
    ? `L’air y dépasse rarement 30 °C (environ ${j0} jours par an), mais une toiture sombre exposée au soleil grimpe malgré tout à 70 °C en surface — et les projections Météo-France annoncent une hausse continue`
    : hasData
      ? `${name} enregistre déjà près de ${j0} journées au-dessus de 30 °C par an, et le rayonnement porte les toitures bac acier au-delà de 70 °C en surface`
      : `${name} subit des étés de plus en plus chauds, et le rayonnement porte les toitures bac acier au-delà de 70 °C en surface`;
  const intro = `${opener} ${climClause}. La peinture cool roof CovaTherm renvoie plus de 90 % du rayonnement solaire incident et abaisse la température sous toiture de 8 à ${red} °C en pic estival, sans climatisation supplémentaire ni arrêt d’exploitation. Spécialiste du revêtement réflectif depuis plus de quatorze ans, Covalba intervient ${inPhrase} avec sa gamme polyuréthane garantie 20 ans.`;

  const sections: SEOTemplate['sections'] = [];

  // 1 — climat local chiffré (unique par ville grâce aux données Explore2)
  sections.push({
    h3: isDepartement ? `Cartographier la contrainte thermique ${inPhrase}` : `Le contexte thermique ${inPhrase}`,
    content: isDepartement
      ? hasData
        ? `${name} se situe en ${cf.label}, marquée par ${cf.trait}. À l’échelle départementale, l’enjeu consiste à repérer les bâtiments où la toiture concentre le plus de charge thermique : zones logistiques, pôles industriels, centres commerciaux et tertiaire dense. Les données Météo-France (Explore2) indiquent environ ${j0} jours au-dessus de 30 °C aujourd’hui et jusqu’à près de ${j20} d’ici une vingtaine d’années, avec une température estivale moyenne qui progresse de ${dec(zone.tempMoyEstivale)} à ${dec(zone.tempMoyEstivale20ans)} °C. Le cool roof permet de transformer cette cartographie climatique en plan d’action : traiter d’abord les surfaces les plus exposées et les bâtiments les plus consommateurs de climatisation.`
        : `${name} se situe en ${cf.label}, marquée par ${cf.trait}. Le département regroupe des typologies très différentes : entrepôts, ateliers, bâtiments tertiaires, commerces et équipements publics. Une toiture sombre peut dépasser 70 °C en surface même lorsque la température de l’air reste modérée. La peinture cool roof permet donc de prioriser les bâtiments selon leur exposition réelle, leur usage et leur potentiel d’économies.`
      : lowHeat
      ? `${name} se situe en ${cf.label}, marquée par ${cf.trait}. Ici, l’enjeu n’est pas le nombre de jours de canicule — environ ${j0} par an — mais la température de surface : exposée au soleil, une toiture bac acier sombre atteint 70 °C même quand l’air plafonne à 25 °C, et transmet cette chaleur aux locaux situés en dessous. Les projections Météo-France (Explore2) annoncent une hausse continue, vers ${j20} jours au-dessus de 30 °C d’ici une vingtaine d’années, avec une moyenne estivale qui progresse de ${dec(zone.tempMoyEstivale)} à ${dec(zone.tempMoyEstivale20ans)} °C. Agir sur la réflectance de la toiture est donc, dès aujourd’hui, le levier le plus efficace pour le confort d’été et la facture de climatisation.`
      : hasData
        ? `${name} se situe en ${cf.label}, marquée par ${cf.trait}. Les relevés et projections de Météo-France (jeu de données Explore2) sont sans appel : d’environ ${j0} jours dépassant 30 °C par an aujourd’hui, ${name} pourrait grimper jusqu’à près de ${j20} d’ici une vingtaine d’années (fourchette haute des modèles), soit ${delta > 0 ? `${delta} jours de chaleur supplémentaires` : 'une intensification continue'} chaque été. La température maximale moyenne estivale y atteint ${dec(zone.tempMoyEstivale)} °C, avec des pics historiques autour de ${dec(zone.picHistorique)} °C. Pour des bâtiments dont la toiture est l’interface principale avec ce rayonnement, agir sur la surface réflective est le levier d’adaptation le plus direct et le plus rapide à mettre en œuvre.`
        : `${name} se situe en ${cf.label}, marquée par ${cf.trait}. Les bâtiments d’activité y voient leurs toitures bac acier dépasser 70 °C en surface lors des pics estivaux, transmettant cette chaleur à l’intérieur. Traiter la toiture en revêtement réflectif est la réponse la plus directe à cette contrainte.`,
  });

  // 2 — secteur (varié selon typeZone)
  sections.push({
    h3: isDepartement
      ? `Prioriser les zones d’activité ${inPhrase}`
      : `${zone.typeZone ? zone.typeZone.split(' / ')[0] : 'Bâtiments professionnels'} : pourquoi le bac acier est le candidat idéal`,
    content: isDepartement
      ? `${inCap}, un projet cool roof efficace commence par une lecture du territoire : ${villesRepere.length ? `les secteurs de ${villesRepere.join(', ')} et les autres pôles d’activité du département` : 'les principaux pôles d’activité du département'} ne présentent pas les mêmes surfaces, usages ni contraintes d’exploitation. ${secteur}. Les supports métalliques restent les plus réactifs : leur conductivité transmet directement le bénéfice de la réflexion solaire à l’intérieur. Un bâtiment traité au CovaTherm voit sa température sous toiture baisser de 8 à ${red} °C en pic estival, avec une application par pulvérisation airless sans charge sur la charpente ni arrêt d’exploitation.`
      : `${inCap}, ${secteur}. Ce sont précisément ces supports métalliques qui tirent le meilleur parti du cool roof : leur conductivité élevée transmet instantanément le bénéfice de la réflexion solaire à l’intérieur du bâtiment. Un bâtiment traité au CovaTherm voit sa température sous toiture baisser de 8 à ${red} °C en pic estival, et sa facture de climatisation reculer de 15 à 40 % selon la configuration. L’application se fait par pulvérisation airless depuis le sol, sans charge sur la charpente : une toiture de 10 000 m² est traitée en 5 à 7 jours, sans interrompre l’exploitation.`,
  });

  // 3 — performance technique (durabilité conditionnée par la zone climatique)
  sections.push({
    h3: `La performance du revêtement CovaTherm face au climat ${inPhrase}`,
    content: `Toutes les peintures réflectives ne se valent pas. La gamme CovaTherm est formulée en polyuréthane bi-composant, conçue pour une ${cf.durab}. Elle conserve un SRI (Solar Reflectance Index) de 118 après vieillissement accéléré — un record européen — quand les peintures acryliques courantes perdent 30 à 50 % de leur réflectance en 3 à 5 ans. Concrètement, ${inPhrase}, cette durabilité représente une économie cumulée de 15 à 25 % sur la facture de climatisation annuelle et évite deux à trois cycles de réfection sur la durée de vie du revêtement (20 ans), là où un produit d’entrée de gamme impose des reprises régulières.`,
  });

  // 4 — Décret tertiaire & CEE (FR uniquement ; filtré automatiquement hors France)
  if (isFR) {
    sections.push({
      h3: `Décret tertiaire et aides CEE ${inPhrase}`,
      content: `Les bâtiments tertiaires et logistiques de plus de 1 000 m² sont soumis au Décret tertiaire, qui impose une réduction de 40 % de leur consommation énergétique d’ici 2030. En réduisant la demande de climatisation de 15 à 40 %, le cool roof contribue directement à cet objectif. En zone ${zone.zoneClimatiqueCEE || zone.zoneClimatique}, les projets de peinture réflective sont par ailleurs éligibles à la Prime CEE (Certificats d’Économie d’Énergie), un dispositif qui peut couvrir une part significative du coût du chantier. Covalba prend en charge le montage du dossier CEE pour chaque projet ${inPhrase}.`,
    });
  }

  // 5 — passage à l'action + maillage local
  const prochesPhrase =
    proches.length >= 2
      ? ` Nos équipes interviennent également à proximité, notamment à ${proches.slice(0, -1).join(', ')} et ${proches[proches.length - 1]}.`
      : '';
  sections.push({
    h3: `Votre projet cool roof ${inPhrase} : diagnostic et estimation sous 48h`,
    content: `Covalba s’appuie sur un réseau d’applicateurs agréés formés à la gamme CovaTherm sur tous types de supports (bac acier, membrane bitumineuse, béton, fibrociment). Chaque projet démarre par un diagnostic technique gratuit sur site : état du support, mesure des surfaces, repérage des points singuliers (lanterneaux, acrotères, exutoires) et estimation du potentiel d’économies. Vous recevez une estimation personnalisée sous 48 heures, ${isFR ? 'chiffrage de la Prime CEE inclus, ' : ''}avec un calendrier d’intervention adapté à vos contraintes d’exploitation.${prochesPhrase}`,
  });

  return { h2, intro, sections };
}

// === Générateur de contenu de blocs (panels) pour les villes SANS contenu rédigé à la main ===
// Localise titres, secteurs et paragraphes à partir des données — pour que les pages générées
// aient la même structure éditoriale que les pages premium (ex. « Lyon, l'été : … »).

const SECTEUR_INFO: Array<{ re: RegExp; stat: string; desc: (n: string) => string }> = [
  { re: /logistiqu|entrep|fret/, stat: 'grandes toitures bac acier', desc: () => 'Entrepôts et plateformes de distribution : de vastes surfaces métalliques exposées sans protection, où la chaleur s’accumule sans filtre.' },
  { re: /a[ée]roport|tarmac/, stat: 'effet tarmac amplifié', desc: () => 'Hangars de fret et terminaux : l’effet tarmac cumule rayonnement direct et chaleur réverbérée par les pistes.' },
  { re: /portuaire|maritime/, stat: 'hangars en plein soleil', desc: () => 'Hangars et terminaux portuaires : des hectares de bac acier exposés sans le moindre ombrage.' },
  { re: /tertiaire|bureau/, stat: 'toitures-terrasses techniques', desc: () => 'Immeubles et bureaux : la surchauffe des terrasses pèse directement sur la climatisation et le confort des occupants.' },
  { re: /agroaliment|viticole/, stat: 'chaîne du froid sous tension', desc: () => 'Sites agroalimentaires : la maîtrise thermique est critique pour les process et le stockage.' },
  { re: /horlog|microtech|[ée]lectro|semi/, stat: 'équipements thermosensibles', desc: () => 'Ateliers de précision : des équipements sensibles qui exigent une température stable été comme hiver.' },
  { re: /a[ée]ronaut|spatial|d[ée]fense/, stat: 'sites industriels de haute précision', desc: () => 'Sites aéronautiques et de défense : de vastes halles d’assemblage où la stabilité thermique compte autant que la production.' },
  { re: /industri|chimie|p[ée]tro|m[ée]tallurg|m[ée]canique|plasturg|nucl[ée]aire|sid[ée]rurg|pneumat|cosm[ée]tique|pharma/, stat: 'chaleur de process + soleil', desc: () => 'Sites de production : la chaleur de process s’ajoute à la surchauffe solaire des toitures.' },
];
function secteurInfo(label: string): { stat: string; desc: string } {
  const t = label.toLowerCase();
  const hit = SECTEUR_INFO.find((s) => s.re.test(t));
  return hit
    ? { stat: hit.stat, desc: hit.desc(label) }
    : { stat: 'grandes toitures exposées', desc: 'Bâtiments d’activité aux grandes toitures planes, premières exposées au rayonnement solaire.' };
}

export function buildZoneContent(zone: ZoneData): ZoneContent {
  const name = zoneName(zone);
  const inPhrase = zoneInPhrase(zone);
  const inCap = zoneInPhraseCap(zone);
  const red = round(zone.reductionSousToiture);
  const isDepartement = zone.pageType === 'departement';
  const isRegion = zone.pageType === 'region';

  // Secteurs : dérivés du champ typeZone (1 à 2 cartes), jamais le fallback « Roissy ».
  const tokens = (zone.typeZone || '')
    .split('/')
    .map((s) => s.trim())
    .filter(Boolean)
    .slice(0, 2);
  // stat laissée vide : le composant la dérive du secteur (formulation variée par ville + dédoublonnage).
  const secteurs = (tokens.length ? tokens : ['Bâtiments d’activité']).map((label) => ({
    label,
    stat: '',
    description: secteurInfo(label).desc,
  }));
  if (secteurs.length === 1)
    secteurs.push({
      label: 'Toitures exposées',
      stat: '',
      description:
        'Quel que soit le secteur, une toiture sombre non traitée atteint 70 °C au soleil et transmet cette chaleur à l’intérieur.',
    });

  return {
    activitesIntro: isDepartement
      ? `<strong>${name}</strong> regroupe plusieurs bassins d’activité ${secteurs.map((s) => s.label.toLowerCase()).join(' et ')} : le workflow cool roof consiste à prioriser les toitures les plus exposées, ville par ville.`
      : isRegion
        ? `<strong>${name}</strong> concentre des zones ${secteurs.map((s) => s.label.toLowerCase()).join(' et ')} très différentes : Covalba adapte le diagnostic cool roof à chaque bassin économique.`
        : `<strong>${name}</strong> concentre ${secteurs.map((s) => s.label.toLowerCase()).join(' et ')} : autant de toitures bac acier qui encaissent le rayonnement de plein fouet.`,
    secteurs,
    problemeTitlePart1: isDepartement ? `${name} :` : `${name}, l’été :`,
    problemeTitlePart2: isDepartement
      ? 'des toitures à prioriser avant la prochaine vague de chaleur.'
      : 'votre toiture monte à 70 °C.',
    problemeParagraph: isDepartement
      ? `À l’échelle du département, la surchauffe ne touche pas tous les bâtiments de la même façon. Les entrepôts, ateliers et bâtiments tertiaires ${inPhrase} doivent être hiérarchisés selon leur surface de toiture, leur exposition et leur dépendance à la climatisation.`
      : `Sur les bâtiments d’activité ${inPhrase}, le rayonnement solaire traverse la toiture bac acier sans filtre. La température sous toiture grimpe jusqu’à 70 °C en pic estival, dégradant le confort des équipes, mettant la climatisation sous tension et accélérant le vieillissement de l’étanchéité.`,
    solutionTitlePart1: isDepartement ? `Plan cool roof ${inPhrase} :` : `Cool roof ${inPhrase} :`,
    solutionTitlePart2: isDepartement
      ? 'diagnostiquer, prioriser, traiter durablement.'
      : 'Covalba, l’efficacité prouvée sur vos toitures.',
    solutionParagraph: isDepartement
      ? `Covalba structure le déploiement départemental : repérage des sites prioritaires, estimation des surfaces, choix du protocole CovaTherm et planification par lots. La résine polyuréthane renvoie <strong>90 % du rayonnement solaire</strong> et réduit la température sous toiture de 8 à ${red} °C en pic estival.`
      : `Notre résine polyuréthane CovaTherm renvoie <strong>90 % du rayonnement solaire</strong> et abaisse la température sous toiture de 8 à ${red} °C en pic estival, sans travaux lourds ni arrêt d’activité — avec un SRI de 118 maintenu sur 20 ans.`,
    preuveBigStat1: '+500 chantiers réalisés.',
    preuveBigStat2: '+2 millions de m² traités.',
    preuveParagraph: isDepartement
      ? `Covalba couvre les principales zones d’activité du département avec un réseau d’applicateurs agréés. ${inCap}, vous recevez une première estimation sous 48h pour cadrer les sites à traiter.`
      : `Des centaines d’entreprises ont déjà franchi le pas. ${inCap}, Covalba réalise un diagnostic gratuit et vous remet une estimation sous 48h.`,
  };
}
