// ---- BRAISE — data layer ----------------------------------------------
// Restaurant au feu de bois. Tunnel de réservation.

const RESTO = {
  name: "BRAISE",
  baseline: "Table & feu de bois",
  intro:
    "Une cuisine au feu vif, des produits de saison saisis sur la braise. Vingt-huit couverts autour du foyer, un menu qui change avec le marché.",
  address: "14 rue des Tanneurs, 69005 Lyon",
  phone: "04 78 00 14 14",
  email: "bonjour@braise.fr",
  hours: [
    ["Mardi — Jeudi", "12h00 – 14h00 · 19h30 – 22h30"],
    ["Vendredi — Samedi", "12h00 – 14h00 · 19h00 – 23h00"],
    ["Dimanche", "12h00 – 15h00"],
    ["Lundi", "Fermé"],
  ],
};

// Services et plages horaires
const SERVICES = [
  { id: "dejeuner", name: "Déjeuner", note: "12h – 14h", icon: "sun" },
  { id: "diner", name: "Dîner", note: "19h – 23h", icon: "moon" },
];

// Choix de salle / ambiance
const ZONES = [
  { id: "salle", name: "Salle", blurb: "Tables d'hôtes et tables dressées", tone: "ember" },
  { id: "feu", name: "Face au feu", blurb: "Comptoir face au foyer ouvert", tone: "gold" },
  { id: "terrasse", name: "Terrasse", blurb: "Cour intérieure, aux beaux jours", tone: "olive" },
  { id: "salon", name: "Salon privé", blurb: "Jusqu'à 10 couverts, sur demande", tone: "ember" },
];

// Plats signature (placeholders d'images)
const SIGNATURES = [
  { id: "s1", name: "Poireaux brûlés, noisette", cat: "Pour commencer", tone: "ember" },
  { id: "s2", name: "Pigeon rôti à la braise, betterave", cat: "Le feu", tone: "gold" },
  { id: "s3", name: "Cabillaud fumé, beurre blanc", cat: "Le feu", tone: "olive" },
  { id: "s4", name: "Pavlova, fruits saisis", cat: "Sucré", tone: "ember" },
];

// Occasions
const OCCASIONS = ["Sans occasion", "Anniversaire", "Dîner d'affaires", "En amoureux", "Entre amis", "Fête de famille"];

// Acompte par couvert (€)
const DEPOSIT_PER_SEAT = 10;

// ---- Génération des créneaux ------------------------------------------
// Déterministe : dépend de la date + service pour que les "complets" soient stables.
function hashStr(s) {
  let h = 0;
  for (let i = 0; i < s.length; i++) h = (h * 31 + s.charCodeAt(i)) >>> 0;
  return h;
}

function slotsFor(dateISO, service, party) {
  const ranges = service === "dejeuner" ? [[12, 0], [14, 0]] : [[19, 0], [22, 30]];
  const [sh, sm] = ranges[0];
  const [eh, em] = ranges[1];
  const out = [];
  let h = sh, m = sm;
  while (h < eh || (h === eh && m <= em)) {
    const label = `${String(h).padStart(2, "0")}h${String(m).padStart(2, "0")}`;
    const seed = hashStr(`${dateISO}|${service}|${label}|${party}`);
    // ~30% complets, un peu plus le week-end (géré par la date dans le seed)
    const full = seed % 100 < 28;
    const tight = !full && seed % 100 < 46; // "dernières places"
    out.push({ label, h, m, full, tight });
    m += 15;
    if (m >= 60) { m -= 60; h += 1; }
  }
  return out;
}

// ---- Dates ------------------------------------------------------------
const JOURS = ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"];
const JOURS_LONG = ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"];
const MOIS = ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"];

const toISO = (d) => `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`;
const fromISO = (s) => { const [y, m, d] = s.split("-").map(Number); return new Date(y, m - 1, d); };

// Le restaurant est fermé le lundi (getDay()===1)
const isClosed = (d) => d.getDay() === 1;

function formatLong(dateISO) {
  if (!dateISO) return "";
  const d = fromISO(dateISO);
  return `${JOURS_LONG[d.getDay()]} ${d.getDate()} ${MOIS[d.getMonth()].toLowerCase()}`;
}
function formatShort(dateISO) {
  if (!dateISO) return "";
  const d = fromISO(dateISO);
  return `${d.getDate()} ${MOIS[d.getMonth()].slice(0, 4).toLowerCase()}`;
}

const fmtEur = (n) => n.toLocaleString("fr-FR") + " €";
const partyLabel = (n) => (n === 1 ? "1 couvert" : `${n} couverts`);

// Référence de réservation
function makeRef() {
  const c = "ABCDEFGHJKMNPQRSTUVWXYZ23456789";
  let s = "";
  for (let i = 0; i < 6; i++) s += c[Math.floor(Math.random() * c.length)];
  return "BR-" + s;
}

// ---- Réservations existantes (espace "mes réservations") --------------
function seedReservations() {
  const today = new Date();
  const plus = (n) => { const d = new Date(today); d.setDate(d.getDate() + n); return toISO(d); };
  const minus = (n) => { const d = new Date(today); d.setDate(d.getDate() - n); return toISO(d); };
  return [
    {
      ref: "BR-K7P2QX", dateISO: plus(5), service: "diner", slot: "20h00", party: 2,
      zone: "feu", firstName: "Camille", lastName: "Rey", occasion: "En amoureux",
      status: "confirmee", deposit: 20,
    },
    {
      ref: "BR-M4WD9T", dateISO: plus(19), service: "dejeuner", slot: "12h30", party: 6,
      zone: "salle", firstName: "Camille", lastName: "Rey", occasion: "Fête de famille",
      status: "confirmee", deposit: 60,
    },
    {
      ref: "BR-3FRH8N", dateISO: minus(12), service: "diner", slot: "19h45", party: 4,
      zone: "salle", firstName: "Camille", lastName: "Rey", occasion: "Entre amis",
      status: "honoree", deposit: 40,
    },
  ];
}

Object.assign(window, {
  RESTO, SERVICES, ZONES, SIGNATURES, OCCASIONS, DEPOSIT_PER_SEAT,
  slotsFor, JOURS, JOURS_LONG, MOIS, toISO, fromISO, isClosed,
  formatLong, formatShort, fmtEur, partyLabel, makeRef, seedReservations,
});
