/* AUSIEGE · Universe data + helpers
   Centralizes Homme / Femme content used across Services, Pricing, Team, Booking, Gallery.
   Univers signature:
     - Femme  → accent champagne  (par défaut du site)
     - Homme  → accent rosewood
   Photos sourced from /assets/HOMME and /assets/FEMMES folders provided by the user.
*/

const UNIVERSE_LABEL = { femme: "Femme", homme: "Homme" };

/* ---------- Réservation en ligne ----------
   Toutes les CTA « Réserver » du site redirigent vers l'app Planity du salon.
   Planity étant une SPA, il n'existe pas d'URL publique stable permettant de
   présélectionner un coiffeur précis : on ouvre donc la page de réservation
   par défaut du salon. */
const PLANITY_URL = "https://www.planity.com/ausiege-60000-beauvais";
/* Idempotent sur un même tick : les CTA header/bookbar ont leur propre onClick
   ET sont captées par la délégation de clic globale (site-app.jsx) → sans ce
   garde, un seul clic ouvrirait deux onglets Planity. */
let _planityOpening = false;
const openPlanity = () => {
  if (_planityOpening) return;
  _planityOpening = true;
  window.open(PLANITY_URL, "_blank", "noopener,noreferrer");
  setTimeout(() => { _planityOpening = false; }, 0);
};

/* ---------- Photo helpers ---------- */
const F = (n) => `assets/FEMMES/${n}`;
const H = (n) => `assets/HOMME/${n}`;
const E = (n) => `assets/EQUIPE/${n}`;

/* Mapping établi à partir des fichiers réellement présents sur disque
   (réorg assets du salon) : noms de prestation prioritaires quand ils existent
   (03_balayage_signature, 07_brushing, enfant), sinon meilleur cliché pertinent. */
const PHOTOS = {
  femme: {
    heroVideo: F("15.mp4"),
    hero:    F("13.jpg"),
    intro:   F("4.jpg"),
    svcCoupe:    F("5.jpg"),
    svcEnfant:   F("enfant.png"),
    svcCouleur:  F("03_balayage_signature_01.jpeg"),
    svcSoin:     F("10.jpg"),
    svcCoiffage: F("07_brushing_01.jpeg"),
    bookCover:   F("11.jpg"),
    gallery: [
      F("5.jpg"),       /* 0 · coupe femme */
      F("03_balayage_signature_01.jpeg"),                    /* 1 · balayage */
      F("07_brushing_03.jpeg"),                              /* 2 · brushing (vignette menu) */
      F("2.jpg"),   /* 3 · balayage (accueil) */
      F("07_brushing_01.jpeg"),                              /* 4 · coiffage */
      F("11.jpg"),   /* 5 · boucles */
      F("07_brushing_02.jpeg"),                              /* 6 · brushing (accueil) */
      F("03_balayage_signature_02.jpeg"),                    /* 7 */
      F("3.jpg"),       /* 8 */
      F("4.jpg"),   /* 9 */
      F("13.jpg"),       /* 10 */
      F("10.jpg"),   /* 11 */
      F("14.jpg"),       /* 12 · ambiance salon */
      F("1.jpg"),       /* 13 */
    ],
  },
  homme: {
    hero:     H("3.jpg"),
    portrait: H("SOSO.jpeg"),  /* portrait signature mis en avant sur l'accueil Homme */
    intro:    H("6.jpg"),
    editorial: H("22.jpg"),    /* illustration de la section éditoriale « Notre maison » (accueil) */
    craft:     H("12.jpg"),    /* illustration de la bande Expertise « Dix ans » (accueil) */
    svcCoupe:   H("2.jpg"),
    svcBarbe:   H("7.jpg"),
    svcRasage:  H("4.jpg"),
    svcCouleur: H("21.jpg"),
    bookCover:  H("20.jpg"),
    gallery: [
      H("13.jpg"),       /* 0 · dégradé (accueil) */
      H("5.jpg"),   /* 1 · coupe homme */
      H("7.jpg"),   /* 2 · barbe (accueil/menu) */
      H("17.jpg"),       /* 3 · rasage */
      H("16.jpg"),   /* 4 · dégradé nuque */
      H("2.jpg"),   /* 5 · coupe (accueil) */
      H("12.jpg"),       /* 6 · contour */
      H("3.jpg"),       /* 7 */
      H("6.jpg"),       /* 8 */
      H("15.jpg"),   /* 9 */
      H("4.jpg"),   /* 10 */
      H("19.jpg"),       /* 11 */
      H("20.jpg"),       /* 12 */
      H("18.jpg"),   /* 13 · barbier au travail */
      H("14.jpg"),   /* 14 · équipe */
      H("21.jpg"),       /* 15 */
      H("1.jpg"),   /* 16 */
    ],
  },
};

/* ---------- Services catalog (per universe) ---------- */
/* Categories per universe:
   FEMME: Coupe, Couleur, Coiffage, Soin
   HOMME: Coupe, Barbier, Couleur, Soin
   Shared services (Couleur cheveux, Soins/Masques) are duplicated in both.
*/
const SERVICES = {
  /* Prestations Femme : tarifs à la demande → aucun prix affiché (price vide). */
  femme: [
    { cat: "Coupe",    n: "01", t: "Coupe femme",         d: "Diagnostic, dessin, dégradé, finitions. Coupe pensée pour la matière et la forme du visage.", price: "", time: "45 min", img: PHOTOS.femme.svcCoupe },
    { cat: "Coupe",    n: "02", t: "Coupe enfant fille",  d: "Coupe spécifique jusqu'à 12 ans. Patience, écoute, dessin adapté.", price: "", time: "30 min", img: PHOTOS.femme.svcEnfant },
    { cat: "Couleur",  n: "03", t: "Balayage signature",  d: "Travail au pinceau, lecture lumière, patine de finition. Devis remis en consultation.", price: "", time: "1h45 · 2h30", img: PHOTOS.femme.svcCouleur },
    { cat: "Couleur",  n: "04", t: "Mèches / décoloration", d: "Mèches ou décoloration tête complète. Devis en consultation, selon longueur.", price: "", time: "45 min +", img: PHOTOS.femme.svcCouleur },
    { cat: "Couleur",  n: "05", t: "Couleur cheveux",     d: "Coloration permanente ou ton-sur-ton. Devis en consultation.", price: "", time: "45 min", img: PHOTOS.femme.svcCouleur },
    { cat: "Couleur",  n: "06", t: "Glossing / patine",   d: "Patine douce, sans engagement. Pour raviver la couleur ou neutraliser un reflet.", price: "", time: "30 min", img: PHOTOS.femme.svcCouleur },
    { cat: "Coiffage", n: "07", t: "Brushing",            d: "Mise en forme, brushing souple ou structuré. Avec ou sans coupe.", price: "", time: "30 min", img: PHOTOS.femme.svcCoiffage },
    { cat: "Coiffage", n: "08", t: "Coiffure mariée / événement", d: "Essai + jour J. Attache, brushing, accessoires. Sur rendez-vous dédié.", price: "", time: "1h30", img: PHOTOS.femme.svcCoiffage },
    { cat: "Soin",     n: "09", t: "Masque réparateur premium", d: "Olaplex, Kérastase. Avec ou sans coupe. Diagnostic offert.", price: "", time: "20 min", img: PHOTOS.femme.svcSoin },
    { cat: "Soin",     n: "10", t: "Rituel cuir chevelu",  d: "Diagnostic, gommage, massage, soin profond. Cabine isolée.", price: "", time: "30 · 45 min", img: PHOTOS.femme.svcSoin },
  ],
  homme: [
    { cat: "Coupe",    n: "01", t: "Coupe homme",         d: "Diagnostic, dessin, dégradé, finitions. Coupe enfant incluse jusqu'à 12 ans.", price: "20 €", time: "30 min", img: PHOTOS.homme.svcCoupe },
    { cat: "Coupe",    n: "02", t: "Coupe afro",          d: "Coupe spécifique cheveux afro / texturés. Lecture de la matière, dégradé adapté.", price: "20 €", time: "30 min", img: PHOTOS.homme.svcCoupe },
    { cat: "Coupe",    n: "03", t: "Transformation",      d: "Repousse supérieure à 4 mois ou changement radical. Consultation préalable.", price: "à partir de 10 €", time: "45 min", img: PHOTOS.homme.svcCoupe },
    { cat: "Barbier",  n: "04", t: "Coupe + barbe courte", d: "Coupe homme et taille de barbe courte. Tondeuse, rasoir, huile en finition.", price: "30 €", time: "45 min", img: PHOTOS.homme.svcBarbe },
    { cat: "Barbier",  n: "05", t: "Coupe + barbe longue", d: "Coupe homme et taille de barbe longue. Dessin précis, ligne, huile.", price: "40 €", time: "45 min", img: PHOTOS.homme.svcBarbe },
    { cat: "Barbier",  n: "06", t: "Rasage traditionnel",  d: "Serviette chaude, mousse au blaireau, lame ouverte, huile en finition.", price: "25 €", time: "30 min", img: PHOTOS.homme.svcRasage },
    { cat: "Couleur",  n: "07", t: "Couleur barbe & cheveux", d: "Coloration cheveux ou barbe. Devis remis en consultation, selon longueur.", price: "sur devis", time: "30 / 45 min", img: PHOTOS.homme.svcCouleur },
    { cat: "Couleur",  n: "08", t: "Décoloration / mèches", d: "Décoloration tête complète, mèches. Devis remis en consultation.", price: "sur devis", time: "45 min +", img: PHOTOS.homme.svcCouleur },
    { cat: "Soin",     n: "09", t: "Serviette chaude · shampoing · soin", d: "Trois suppléments rituel à ajouter à toute prestation. 5 € chacun.", price: "5 € · supplément", time: "5 min", img: PHOTOS.homme.svcRasage },
    { cat: "Soin",     n: "10", t: "Masque réparateur premium", d: "Olaplex, Kérastase. Avec ou sans coupe.", price: "à partir de 32 €", time: "20 min", img: PHOTOS.homme.svcRasage },
  ],
};

/* Filter buckets used by the chiprow on the Services page */
const filtersOf = (uni) => {
  const items = SERVICES[uni];
  const cats = [...new Set(items.map(i => i.cat))];
  return [
    { name: "Toutes", count: items.length },
    ...cats.map(c => ({ name: c, count: items.filter(i => i.cat === c).length })),
  ];
};

/* ---------- Pricing (per universe) ----------
   Liste PLATE, triée par popularité (services les plus demandés en premier) :
   plus d'accordéon, plus de cartes cadeaux. Chaque ligne porte un tag `cat`
   discret. Tarifs Femme « sur demande » → champ prix (p) vide. */
const PRICING = {
  femme: [
    { cat: "Coupe",    n: "Coupe femme",              d: "Diagnostic, dégradé, finitions. Selon longueur et matière", p: "", t: "45 min" },
    { cat: "Coiffage", n: "Brushing",                 d: "Mise en forme, souple ou structuré", p: "", t: "30 min" },
    { cat: "Couleur",  n: "Balayage signature",       d: "Travail pinceau, patine. Devis en consultation", p: "", t: "1h45 · 2h30" },
    { cat: "Couleur",  n: "Couleur cheveux",          d: "Coloration ou ton-sur-ton. Devis en consultation", p: "", t: "45 min" },
    { cat: "Couleur",  n: "Glossing / patine",        d: "Pour raviver ou neutraliser un reflet", p: "", t: "30 min" },
    { cat: "Couleur",  n: "Mèches / décoloration",    d: "Tête complète. Devis en consultation", p: "", t: "45 min +" },
    { cat: "Soin",     n: "Masque réparateur premium", d: "Olaplex, Kérastase. Avec ou sans coupe", p: "", t: "20 min" },
    { cat: "Soin",     n: "Rituel cuir chevelu",      d: "Diagnostic, gommage, massage. Cabine isolée", p: "", t: "30 · 45 min" },
    { cat: "Coiffage", n: "Coiffure mariée / événement", d: "Essai + jour J. Attache, brushing", p: "", t: "1h30" },
    { cat: "Coupe",    n: "Coupe enfant fille",       d: "Jusqu'à 12 ans, dessin adapté", p: "", t: "30 min" },
    { cat: "Coupe",    n: "Transformation",           d: "Repousse supérieure à 4 mois ou changement radical", p: "", t: "45 min" },
    { cat: "Soin",     n: "Serviette chaude",         d: "Supplément à ajouter à toute prestation", p: "", t: "5 min" },
    { cat: "Soin",     n: "Shampoing premium",        d: "Supplément à ajouter à toute prestation", p: "", t: "5 min" },
  ],
  homme: [
    { cat: "Coupe",   n: "Coupe homme",            d: "Diagnostic, dégradé, finitions. Enfant inclus jusqu'à 12 ans", p: "20 €", t: "30 min" },
    { cat: "Barbier", n: "Coupe + barbe courte",   d: "Coupe homme et taille de barbe courte", p: "30 €", t: "45 min" },
    { cat: "Barbier", n: "Coupe + barbe longue",   d: "Coupe homme et taille de barbe longue", p: "40 €", t: "45 min" },
    { cat: "Barbier", n: "Rasage traditionnel",    d: "Serviette chaude, mousse au blaireau, lame ouverte", p: "25 €", t: "30 min" },
    { cat: "Coupe",   n: "Coupe afro",             d: "Cheveux texturés. Lecture matière, dégradé adapté", p: "20 €", t: "30 min" },
    { cat: "Coupe",   n: "Transformation",         d: "Repousse supérieure à 4 mois ou changement radical", p: "à partir de 10 €", t: "45 min" },
    { cat: "Soin",    n: "Serviette chaude",       d: "Supplément à ajouter à toute prestation", p: "5 €", t: "5 min" },
    { cat: "Soin",    n: "Shampoing",              d: "Supplément à ajouter à toute prestation", p: "5 €", t: "5 min" },
    { cat: "Soin",    n: "Masque réparateur",      d: "Olaplex, Kérastase. Avec ou sans coupe", p: "à partir de 32 €", t: "20 min" },
    { cat: "Couleur", n: "Couleur cheveux",        d: "Coloration. Devis en consultation", p: "sur devis", t: "45 min" },
    { cat: "Couleur", n: "Couleur barbe",          d: "Coloration barbe. Devis en consultation", p: "sur devis", t: "30 min" },
    { cat: "Couleur", n: "Décoloration / mèches",  d: "Tête complète. Devis en consultation", p: "sur devis", t: "45 min +" },
  ],
};

/* ---------- Team — équipe unifiée 7 personnes (mixte Femme/Homme) ---------- */
/* Photo collective affichée en bannière sur la page Équipe (3 breakpoints). */
const TEAM_COVER = E("equipe.jpeg");
const TEAM_ALL = [
  { id: "babacar",  num: "01", name: "Babacar",  role: "Styliste", img: E("Babacar.jpeg"),  universes: ["homme", "femme"] },
  { id: "sophiane", num: "02", name: "Sophiane", role: "Styliste", img: E("Sophiane.jpeg"), universes: ["homme", "femme"] },
  { id: "killian",  num: "03", name: "Killian",  role: "Styliste", img: E("Killian.jpeg"),  universes: ["homme", "femme"] },
  { id: "paul",     num: "04", name: "Paul",     role: "Styliste", img: E("Paul.jpeg"),     universes: ["homme", "femme"] },
  { id: "gokhan",   num: "05", name: "Gokhan",   role: "Styliste", img: E("Gokhan.jpeg"),   universes: ["homme", "femme"] },
  { id: "julien",   num: "06", name: "Julien",   role: "Styliste", img: E("Julien.jpeg"),   universes: ["homme", "femme"] },
  { id: "anaelle",  num: "07", name: "Anaelle",  role: "Styliste", img: E("Anaelle.jpeg"),  universes: ["homme", "femme"] },
];

/* Équipe unifiée : on retourne l'ensemble quel que soit l'univers demandé. */
const teamOf = (_uni) =>
  TEAM_ALL.map((m, i) => ({ ...m, num: String(i + 1).padStart(2, "0") }));

/* ---------- Booking services (per universe) ---------- */
const BOOKING_SERVICES = {
  /* Tarifs Femme à la demande → price laissé vide (cohérence avec SERVICES/PRICING). */
  femme: [
    { id: "coupe",          t: "Coupe femme",          price: "", time: "45 min" },
    { id: "brushing",       t: "Brushing",             price: "", time: "30 min" },
    { id: "balayage",       t: "Balayage signature",   price: "", time: "1h45 · 2h30" },
    { id: "meches",         t: "Mèches / décoloration", price: "", time: "45 min +" },
    { id: "couleur",        t: "Couleur cheveux",      price: "", time: "45 min" },
    { id: "glossing",       t: "Glossing / patine",    price: "", time: "30 min" },
    { id: "mariee",         t: "Coiffure mariée / événement", price: "", time: "1h30" },
    { id: "soin",           t: "Masque réparateur premium",   price: "", time: "20 min" },
  ],
  homme: [
    { id: "coupe",          t: "Coupe homme",          price: "20 €", time: "30 min" },
    { id: "coupe-afro",     t: "Coupe afro",           price: "20 €", time: "30 min" },
    { id: "coupe-barbe-c",  t: "Coupe + barbe courte", price: "30 €", time: "45 min" },
    { id: "coupe-barbe-l",  t: "Coupe + barbe longue", price: "40 €", time: "45 min" },
    { id: "rasage",         t: "Rasage traditionnel",  price: "25 €", time: "30 min" },
    { id: "couleur",        t: "Couleur cheveux ou barbe", price: "sur devis", time: "30 / 45 min" },
    { id: "decoloration",   t: "Décoloration",         price: "sur devis", time: "45 min +" },
    { id: "soin",           t: "Masque réparateur",    price: "à partir de 32 €", time: "20 min" },
  ],
};

/* ---------- Editorial copy snippets (per universe) ---------- */
const COPY = {
  femme: {
    eyebrowSite: "Univers Femme / Beauvais",
    heroTitle:   <>La coiffure, <em>comme une signature</em>.</>,
    heroSub:     "Coupe, couleur, soin et coiffage événement. Un travail de matière, de lumière, de proportion, pensé pour vous, pour la repousse, pour la saison.",
    introOverline: "Une adresse de précision",
    introBody:   "Chez AUSIÈGE, chaque rendez-vous femme commence par une lecture du cheveu : texture, densité, mouvement, repousse. Puis vient le geste, posé. Notre équipe est formée au balayage signature, à la méthode boucles, aux soins profonds.",
    sectionTitle: <>Quatre <em>territoires</em>, une signature.</>,
    sectionLede:  "Coupe, couleur, coiffage, soin. Chacun confié à un styliste formé spécifiquement, avec ses outils et son protocole.",
    pagesEyebrow: "Femme · prestations",
    instagram: "@ausiegepourelle",
    pricingTitle: <>Sur mesure, <em>sur demande</em>.</>,
    pricingLede:  "Chaque prestation femme est sur mesure : le tarif dépend de la longueur, de la matière et du styliste. Il vous est communiqué sur demande, lors d'un devis en consultation.",
    pricingAside: "Aucun coût caché. Les tarifs vous sont communiqués sur demande, en consultation.",
    servicesPriceNote: "Tarifs sur demande, devis remis en consultation.",
    bookingTitle: <>Prendre place · <em>univers Femme</em>.</>,
    bookingSub:   "Quatre étapes, sans acompte, annulation libre jusqu'à 4 heures avant.",
  },
  homme: {
    eyebrowSite: "Univers Homme / Beauvais",
    heroTitle:   <>Le geste juste, <em>à la lame</em>.</>,
    heroSub:     "Coupe, taille de barbe, rasage traditionnel à la serviette chaude. Sept barbiers, sept regards, un même salon. Du mardi au dimanche.",
    introOverline: "Une école du geste",
    introBody:   "Chez AUSIÈGE, chaque rendez-vous homme commence par la lecture du visage : ligne, volume, repousse. Puis vient le dessin, puis la lame. Notre équipe est formée au dégradé, à la coupe afro, au rasage traditionnel.",
    sectionTitle: <>Quatre <em>gestes</em>, une signature.</>,
    sectionLede:  "Coupe, barbier, couleur, soin. Chacun confié à un barbier formé spécifiquement, avec ses outils et son protocole.",
    pagesEyebrow: "Homme · prestations",
    instagram: "@au_siege",
    pricingTitle: <>Transparents, <em>sans surprise</em>.</>,
    pricingLede:  "Les fourchettes annoncées tiennent compte de la longueur et de la matière. Un devis précis vous est remis en consultation.",
    pricingAside: "Aucun coût caché. Les prix présentés sont les tarifs hors options.",
    servicesPriceNote: "Tarifs transparents, sans surprise.",
    bookingTitle: <>Prendre place · <em>univers Homme</em>.</>,
    bookingSub:   "Quatre étapes, sans acompte, annulation libre jusqu'à 4 heures avant.",
  },
};

Object.assign(window, {
  UNIVERSE_LABEL,
  PLANITY_URL, openPlanity,
  PHOTOS, SERVICES, PRICING, BOOKING_SERVICES, COPY,
  TEAM_ALL, TEAM_COVER, teamOf, filtersOf,
});
