// app/data.jsx — Données de l'app invité

const APP_DATA = {
  bride: "Enora",
  groom: "Antoine",
  dateISO: "2027-08-21T17:30:00+02:00",
  dateLong: "Samedi 21 août 2027",
  dateShort: "21 / 08 / 2027",

  // Plan de table — 10 tables numérotées (placeholders, à remplacer)
  tables: [
    { id: "t1",  name: "Table 1",  seats: 8, color: "#B85A4E", note: "Famille Enora", guests: ["Camille Martin", "Laure Bernard", "Sophie Durand", "Marie Lambert", "Élise Rousseau", "Claire Fournier", "Pauline Dupont", "Charlotte Robert"] },
    { id: "t2",  name: "Table 2",  seats: 8, color: "#7E8F75", note: "Famille Antoine", guests: ["Pierre Dubois", "Marc Lefèvre", "Thomas Leroy", "Alexandre Moreau", "Vincent Roux", "Antoine Girard", "Hugo Mercier", "Julien Lemaire"] },
    { id: "t3",  name: "Table 3",  seats: 8, color: "#BE9A48", note: "Amis Toulouse", guests: ["Nicolas Garcia", "Anna Bonnet", "Léa Faure", "Maxime Vidal", "Manon Henry", "Sébastien Morel", "Florence Carpentier", "Gabriel Picard"] },
    { id: "t4",  name: "Table 4",  seats: 8, color: "#9FA3CC", note: "Promo prépa Fermat", guests: ["Inès Schmitt", "Romain Barbier", "Hélène Renault", "Théo Marchand", "Margaux Riviere", "Adrien Perrot", "Quentin Blanc", "Julie Petit"] },
    { id: "t5",  name: "Table 5",  seats: 8, color: "#D88A6A", note: "Vétos & confrères", guests: ["Bertrand Dumas", "Sandrine Picot", "Olivier Brun", "Catherine Aubert", "Yann Leclerc", "Nathalie Guérin", "Damien Roy", "Sophie Vincent"] },
    { id: "t6",  name: "Table 6",  seats: 8, color: "#A4B49B", note: "Tatami amis", guests: ["François Mathieu", "Aline Berger", "Mathieu Lopez", "Caroline Lefebvre", "Jérôme Pascal", "Émilie Garnier", "Stéphane Adam", "Valérie Olivier"] },
    { id: "t7",  name: "Table 7",  seats: 8, color: "#8E7128", note: "Cousinade", guests: ["Lucas Bertrand", "Amandine Hubert", "Cyril Joly", "Bénédicte Noel", "Mickaël Carré", "Aurélie Maillot", "Frédéric Dumont", "Isabelle Riou"] },
    { id: "t8",  name: "Table 8",  seats: 8, color: "#E8C467", note: "Voisins d'enfance", guests: ["Patrick Lacombe", "Christine Bourgeois", "Bernard Renaud", "Monique Sanchez", "Gérard Letellier", "Brigitte Marty", "Daniel Bonnet", "Sylvie Charpentier"] },
    { id: "t9",  name: "Table 9",  seats: 8, color: "#C8786E", note: "Famille élargie", guests: ["Henri Vidal", "Suzanne Fabre", "Robert Pichard", "Madeleine Roussel", "Jean Bertin", "Geneviève Lopez", "André Delcourt", "Yvette Méric"] },
    { id: "t10", name: "Table 10", seats: 8, color: "#B89055", note: "Témoins & équipe rapprochée", guests: ["Bride & Groom", "Témoin · Camille", "Témoin · Laure", "Témoin · Pierre", "Témoin · Marc", "Officiant·e", "Photographe", "DJ"] },
  ],

  // Gîtes — 9 logements sur le domaine, 50 couchages au total (placeholders).
  // `inChateau` : true si le gîte est dans l'enceinte du domaine (afficher
  // sur la map), false sinon (afficher juste les infos texte).
  gites: [
    { id: "fournil",    name: "Fournil",    beds: 6, inChateau: true,  occupants: ["Camille Martin", "Sophie Durand", "Marie Lambert", "Élise Rousseau", "Claire Fournier", "Pauline Dupont"] },
    { id: "pigeonnier", name: "Pigeonnier", beds: 4, inChateau: true,  occupants: ["Pierre Dubois", "Marc Lefèvre", "Thomas Leroy", "Alexandre Moreau"] },
    { id: "remise",     name: "Remise",     beds: 5, inChateau: true,  occupants: ["Nicolas Garcia", "Anna Bonnet", "Léa Faure", "Maxime Vidal", "Manon Henry"] },
    { id: "tilbury",    name: "Tilbury",    beds: 6, inChateau: true,  occupants: ["Inès Schmitt", "Romain Barbier", "Hélène Renault", "Théo Marchand", "Margaux Riviere", "Adrien Perrot"] },
    { id: "roseraie",   name: "Roseraie",   beds: 4, inChateau: true,  occupants: ["Bertrand Dumas", "Sandrine Picot", "Olivier Brun", "Catherine Aubert"] },
    { id: "tuilerie",   name: "Tuilerie",   beds: 7, inChateau: true,  occupants: ["François Mathieu", "Aline Berger", "Mathieu Lopez", "Caroline Lefebvre", "Jérôme Pascal", "Émilie Garnier", "Stéphane Adam"] },
    { id: "eveque",     name: "Évêque",     beds: 4, inChateau: true,  occupants: ["Lucas Bertrand", "Amandine Hubert", "Cyril Joly", "Bénédicte Noel"] },
    { id: "pressoir",   name: "Pressoir",   beds: 7, inChateau: true,  occupants: ["Patrick Lacombe", "Christine Bourgeois", "Bernard Renaud", "Monique Sanchez", "Gérard Letellier", "Brigitte Marty", "Daniel Bonnet"] },
    { id: "marion",     name: "Marion",     beds: 7, inChateau: true,  occupants: ["Henri Vidal", "Suzanne Fabre", "Robert Pichard", "Madeleine Roussel", "Jean Bertin", "Geneviève Lopez", "André Delcourt"] },
  ],

  // Place your bets — 12 paris ludiques répartis en 3 catégories
  // Types : "qcm" (4 options) · "yesno" (oui/non) · "slider" (curseur)
  bets: [
    // ─── Catégorie ÉMOTIONS ───
    { id: "cry", category: "emotions", type: "qcm", icon: "♥",
      q: "Qui pleurera en premier pendant les discours ?",
      options: ["Enora", "Antoine", "La maman d'Enora", "Le papa d'Antoine", "Un témoin", "Personne"] },
    { id: "tears_a", category: "emotions", type: "yesno", icon: "♥",
      q: "Antoine pleurera-t-il pendant les vœux ?" },
    { id: "mic", category: "emotions", type: "qcm", icon: "♠",
      q: "Combien de fois Antoine prendra-t-il le micro ?",
      options: ["Une fois (sage)", "Deux fois", "Trois fois", "Il ne le lâche plus"] },
    { id: "shoes", category: "emotions", type: "qcm", icon: "♥",
      q: "Qui perdra une chaussure dans la pelouse en premier ?",
      options: ["La mariée", "Un témoin", "Un cousin éloigné", "Personne, on a prévenu"] },

    // ─── Catégorie CHIFFRES ───
    { id: "speeches", category: "chiffres", type: "qcm", icon: "♠",
      q: "Combien de discours au repas ?",
      options: ["1 à 2", "3 à 4", "5 à 6", "7 ou plus, on n'aura jamais fini"] },
    { id: "tiramisu", category: "chiffres", type: "qcm", icon: "♣",
      q: "Combien de parts de tiramisu seront servies ?",
      options: ["Moins de 50", "Entre 50 et 80", "Entre 80 et 120", "Plus de 120 — il en restera demain"] },
    { id: "dance", category: "chiffres", type: "qcm", icon: "♦",
      q: "Durée de la première danse ?",
      options: ["Moins de 2 min", "Entre 2 et 3 min", "Entre 3 et 4 min", "Plus de 4 min"] },
    { id: "bottles", category: "chiffres", type: "slider", icon: "♦",
      q: "Combien de bouteilles seront bues ?",
      min: 60, max: 220, step: 10, unit: "bouteilles", suffix: "bouteilles", defaultValue: 140,
      labelMin: "60 (sobres)", labelMax: "220 (légendaire)" },
    { id: "endtime", category: "chiffres", type: "slider", icon: "♣",
      q: "À quelle heure la dernière danse ?",
      min: 22, max: 30, step: 1, unit: "h", suffix: "h", defaultValue: 26,
      formatValue: (v) => `${v % 24}h` + (v >= 24 ? " (le lendemain)" : ""),
      labelMin: "22h", labelMax: "6h" },

    // ─── Catégorie SURPRISES & MYSTÈRES ───
    { id: "phila", category: "surprises", type: "qcm", icon: "♦",
      q: "Combien de fois Phila (le chat) sera mentionné dans la journée ?",
      options: ["1 à 3 fois", "4 à 6 fois", "7 à 10 fois", "Plus que les mariés eux-mêmes"] },
    { id: "weather", category: "surprises", type: "qcm", icon: "♥",
      q: "Quel temps fera-t-il le jour J ?",
      options: ["Grand soleil", "Soleil voilé / orageux", "Quelques gouttes", "L'orage du siècle"] },
    { id: "surprise", category: "surprises", type: "qcm", icon: "♠",
      q: "Y aura-t-il une chorégraphie surprise ?",
      options: ["Oui, et elle sera parfaite", "Oui, et elle sera ratée", "Non", "Plusieurs, dont une catastrophique"] },
  ],

  // Pari secret Phila (easter egg #2 — déverrouillé après soumission des 12 paris)
  philaSecretBet: {
    id: "phila_secret", type: "qcm", icon: "",
    q: "Phila te demande : si elle assistait au mariage, que ferait-elle ?",
    options: [
      "Roupiller sur la table d'honneur",
      "S'enfuir dans le bois de La Charmille",
      "Squatter les genoux d'Antoine pendant les vœux",
      "Refuser de partir et nous suivre en lune de miel",
    ],
  },

  betCategories: [
    { id: "emotions",  icon: "♥", title: "Les émotions",        sub: "Les larmes, les rires, les petits drames" },
    { id: "chiffres",  icon: "♦", title: "Les chiffres",        sub: "Pronostics quantitatifs — soyez précis" },
    { id: "surprises", icon: "♠", title: "Surprises & mystères", sub: "Les paris au plus haut risque" },
  ],

  // Anecdotes — thématiques pour inspirer les invités
  anecdotes_themes: [
    { id: "rencontre", icon: "♥", title: "La rencontre", hint: "Le moment où vous les avez vus se rencontrer, ou se découvrir. Premier regard, premier mot, premier malaise." },
    { id: "voyage", icon: "♦", title: "En voyage", hint: "Une aventure mémorable d'Enora et Antoine en vadrouille — train raté, week-end improvisé, rencontre cocasse." },
    { id: "sport", icon: "♠", title: "Sur le tatami (ou ailleurs)", hint: "Une histoire de judo, de cheval, de boxe… ou n'importe quel sport qu'ils s'imaginent maîtriser." },
    { id: "phila", icon: "♣", title: "Phila — le chat", hint: "Tout ce qui touche à leur chat. Phila a forcément des histoires à raconter." },
    { id: "cuisine", icon: "♥", title: "En cuisine", hint: "Une histoire culinaire — Antoine qui rate un plat, Enora qui invente une recette improbable, ou un dîner mémorable." },
    { id: "quiproquo", icon: "♦", title: "Le quiproquo", hint: "Un malentendu drôle, une histoire de SMS envoyé au mauvais destinataire, une confusion mémorable." },
    { id: "secret", icon: "♠", title: "Ce qu'ils ignorent que vous savez", hint: "Vous avez vu, entendu ou découvert quelque chose qu'ils ne savent pas. Le moment idéal pour le révéler." },
    { id: "absurde", icon: "♣", title: "Le plus absurde", hint: "Une histoire complètement improbable. Si vous hésitez sur la véracité, c'est sans doute parfait pour le concours." },
    { id: "avant", icon: "♥", title: "Avant qu'ils se connaissent", hint: "Une anecdote sur l'un d'eux quand l'autre n'existait pas encore. Bonus si c'est embarrassant." },
    { id: "rire", icon: "♦", title: "Le fou rire", hint: "Le moment où vous avez le plus ri avec eux. Bonus si Enora pleurait de rire." },
  ],

  // Sound zones — info extraite du PDF Consignes son
  sound_zones: [
    { id: "cour", name: "Cour centrale", limit: "94 dB", rules: "Musique jusqu'à 23h · Cuivres, sax & percussions autorisés avant 20h · Pas de micros après 23h · Portes sud & cuisine Tilbury fermées" },
    { id: "salle", name: "Salle de réception", limit: "94 dB", rules: "Même consigne que la cour centrale" },
    { id: "verger", name: "Pelouse du verger", limit: "75 dB", rules: "Musique acoustique uniquement" },
    { id: "charmille", name: "Pelouse La Charmille", limit: "75 dB", rules: "Musique jusqu'à 23h · Contrôle des basses · Pas de cuivres ni percussions" },
    { id: "parc", name: "Pelouse du parc", limit: "75 dB", rules: "Musique jusqu'à 22h" },
    { id: "piscine", name: "Pelouse de la piscine", limit: "75 dB", rules: "Musique jusqu'à 20h · Pas de musique dans l'abri piscine" },
    { id: "bois", name: "Bois de La Charmille", limit: "—", rules: "Pas de limite horaire · Pas de microphone après 23h" },
    { id: "cloitre", name: "Cloître", limit: "75 dB", rules: "Musique jusqu'à 19h" },
  ],
};

// Liste plate des invités (pour fuzzy match dans plan de table)
APP_DATA.allGuests = APP_DATA.tables.flatMap(t => t.guests.map(g => ({ name: g, tableId: t.id, tableName: t.name })));

// Liste plate des occupants des gîtes (pour fuzzy match "où je dors")
APP_DATA.allSleepers = APP_DATA.gites.flatMap(g => g.occupants.map(o => ({ name: o, giteId: g.id, giteName: g.name })));

Object.assign(window, { APP_DATA });
