// ====== PAGES LÉGALES ======
// Mentions légales, conditions de vente, confidentialité, allergènes.
// Les informations sur l'entreprise viennent de RESTO.legal (carte.js) :
// un champ vide s'affiche « à compléter », on n'invente rien.

const PAGES_LEGALES = [
  { cle: 'mentions', titre: 'Mentions légales' },
  { cle: 'cgv', titre: 'Conditions de vente' },
  { cle: 'confidentialite', titre: 'Confidentialité' },
  { cle: 'allergenes', titre: 'Allergènes' },
];

const ALLERGENES_14 = [
  'Céréales contenant du gluten (blé, seigle, orge, avoine…)', 'Crustacés', 'Œufs', 'Poissons',
  'Arachides', 'Soja', 'Lait (y compris le lactose)', 'Fruits à coque (amandes, noisettes, noix, pistaches…)',
  'Céleri', 'Moutarde', 'Graines de sésame', 'Anhydride sulfureux et sulfites', 'Lupin', 'Mollusques',
];

function ChampLegal({ valeur }) {
  return valeur
    ? <>{valeur}</>
    : <span className="italic text-[var(--muted)]">à compléter</span>;
}

function BlocLegal({ titre, children }) {
  return (
    <section className="mt-5">
      <h4 className="font-bold text-[var(--cream)] text-sm uppercase tracking-wider">{titre}</h4>
      <div className="mt-2 space-y-2 text-sm text-[var(--cream-2)] leading-relaxed">{children}</div>
    </section>
  );
}

function ContenuLegal({ page }) {
  const L = (typeof RESTO !== 'undefined' && RESTO.legal) || {};
  const nom = L.raisonSociale || SHOP.name;
  const contact = (
    <>
      sur place au {SHOP.address}
      {SHOP.phone ? <>, par téléphone au {SHOP.phone}</> : null}
      {L.email ? <>, ou par e-mail à {L.email}</> : null}
    </>
  );
  const livraison = SHOP.delivery || {};

  if (page === 'mentions') return (
    <>
      <BlocLegal titre="Éditeur du site">
        <p>Raison sociale : <ChampLegal valeur={L.raisonSociale}/></p>
        <p>Forme juridique et capital : <ChampLegal valeur={L.forme}/></p>
        <p>Siège et restaurant : {SHOP.address}</p>
        <p>SIRET : <ChampLegal valeur={L.siret}/></p>
        <p>Immatriculation : <ChampLegal valeur={L.rcs}/></p>
        <p>TVA intracommunautaire : <ChampLegal valeur={L.tva}/></p>
        <p>Contact : {contact}.</p>
        <p>Directeur de la publication : <ChampLegal valeur={L.responsable}/></p>
      </BlocLegal>
      <BlocLegal titre="Hébergement">
        <p><ChampLegal valeur={L.hebergeur}/></p>
        {L.serveurLieu ? <p>Serveur situé à {L.serveurLieu}.</p> : null}
      </BlocLegal>
      <BlocLegal titre="Propriété intellectuelle">
        <p>Le nom {SHOP.name}, le logo, les textes et la carte sont la propriété de {nom}. Toute reproduction sans accord écrit est interdite.</p>
        <p>Les photos sont des illustrations, non contractuelles. Les photos d'auteurs extérieurs sont citées dans les « Crédits photos ».</p>
      </BlocLegal>
    </>
  );

  if (page === 'cgv') return (
    <>
      <BlocLegal titre="Objet">
        <p>Ces conditions s'appliquent aux commandes passées sur ce site auprès de {nom}, {SHOP.address} : sur place (QR code de la table), à emporter{livraison.active ? ' et en livraison' : ''}.</p>
      </BlocLegal>
      <BlocLegal titre="Prix">
        <p>Les prix sont indiqués en euros, toutes taxes comprises. Le prix appliqué est celui affiché au moment de la commande. Les photos ne sont pas contractuelles.</p>
      </BlocLegal>
      <BlocLegal titre="Commande">
        <p>La commande est ferme dès sa validation : elle part aussitôt en préparation. Pour une commande à table, l'équipe vérifie d'abord que la table est occupée.</p>
        <p>Un plat peut manquer : l'équipe vous prévient alors et vous propose un remplacement ou le retire de la commande.</p>
      </BlocLegal>
      <BlocLegal titre="Paiement">
        <p>Sur place, le règlement se fait au restaurant, en espèces ou par carte. Une commande à emporter{livraison.active ? ' ou en livraison' : ''} passée sur le site se règle en espèces au retrait{livraison.active ? ' ou au livreur' : ''}. Lorsque le paiement par carte en ligne est proposé, il passe par un prestataire de paiement sécurisé : {SHOP.name} ne voit ni ne conserve jamais votre numéro de carte.</p>
      </BlocLegal>
      {livraison.active && (
        <BlocLegal titre="Livraison">
          <p>Zone : {livraison.radius}. Commande minimum : {Number(livraison.minOrder || 0).toFixed(2).replace('.', ',')} €.
            {' '}Frais : {Number(livraison.fee || 0).toFixed(2).replace('.', ',')} €{livraison.freeAbove ? `, offerts dès ${Number(livraison.freeAbove).toFixed(2).replace('.', ',')} €` : ''}.
            {' '}Délai indicatif : {livraison.time}, qui peut s'allonger aux heures de pointe.</p>
          <p>Merci de donner une adresse complète et un numéro joignable : sans réponse à la livraison, la commande reste due.</p>
        </BlocLegal>
      )}
      <BlocLegal titre="Rétractation">
        <p>Il n'y a pas de droit de rétractation sur les plats préparés à la demande et périssables (article L221-28 du Code de la consommation).</p>
      </BlocLegal>
      <BlocLegal titre="Un problème avec votre commande ?">
        <p>Signalez-le tout de suite : {contact}. Nous cherchons toujours une solution (plat refait, remplacé ou remboursé).</p>
        <p>En cas de désaccord, vous pouvez recourir gratuitement au médiateur de la consommation : <ChampLegal valeur={L.mediateur}/>.</p>
      </BlocLegal>
    </>
  );

  if (page === 'confidentialite') return (
    <>
      <BlocLegal titre="Responsable">
        <p>{nom}, {SHOP.address}. Contact : {contact}.</p>
      </BlocLegal>
      <BlocLegal titre="Ce que nous recueillons, et pourquoi">
        <p><b>Sur place</b> : rien sur vous. Le numéro de table suffit.</p>
        <p><b>À emporter{livraison.active ? ' et en livraison' : ''}</b> : votre nom, votre téléphone{livraison.active ? ' et, pour une livraison, votre adresse' : ''}. Ils servent uniquement à préparer la commande, à vous la remettre et à vous joindre en cas de souci.</p>
        <p>Pas de publicité, pas de revente, pas de fichier commercial. Ces informations ne sont transmises à personne, sauf au livreur pour votre commande.</p>
      </BlocLegal>
      {L.serveurLieu && /canada/i.test(L.serveurLieu) ? (
        <BlocLegal titre="Où sont vos données">
          <p>Le site est hébergé par OVHcloud sur un serveur situé au Canada ({L.serveurLieu}). La Commission européenne reconnaît au Canada un niveau de protection des données personnelles équivalent à celui de l'Union européenne (décision d'adéquation) : vos données y bénéficient des mêmes garanties.</p>
        </BlocLegal>
      ) : null}
      <BlocLegal titre="Durée de conservation">
        <p>Vos coordonnées sont gardées le temps de traiter la commande et de répondre à une éventuelle réclamation, puis au plus 3 ans. Les montants des ventes sont conservés 10 ans, comme la loi l'impose pour la comptabilité.</p>
      </BlocLegal>
      <BlocLegal titre="Cookies et stockage">
        <p>Ce site n'utilise aucun cookie publicitaire ni outil de mesure d'audience. Il garde seulement votre panier dans votre navigateur, pour qu'il ne se vide pas si vous rechargez la page. Pour éviter les abus, le serveur enregistre aussi, pour un temps court, des informations techniques de connexion.</p>
      </BlocLegal>
      <BlocLegal titre="Vos droits">
        <p>Vous pouvez demander à consulter, corriger ou effacer vos données : {contact}. Si vous estimez que vos droits ne sont pas respectés, vous pouvez saisir la CNIL (cnil.fr).</p>
      </BlocLegal>
    </>
  );

  // Allergènes
  return (
    <>
      <BlocLegal titre="Votre sécurité d'abord">
        <p>Nos plats sont préparés dans une même cuisine, où sont présents les 14 allergènes réglementaires. Même quand un ingrédient est retiré, des traces restent possibles.</p>
        <p><b>Allergie ou intolérance ? Dites-le avant de commander</b> : {contact}. L'équipe vous indique, plat par plat et par écrit, les allergènes présents. Vous pouvez aussi l'écrire dans la note de la commande.</p>
      </BlocLegal>
      <BlocLegal titre="Les 14 allergènes à déclaration obligatoire">
        <ul className="list-disc pl-5 space-y-1">
          {ALLERGENES_14.map(a => <li key={a}>{a}</li>)}
        </ul>
      </BlocLegal>
    </>
  );
}

function PageLegale({ page, onClose, onChange }) {
  const infos = PAGES_LEGALES.find(p => p.cle === page) || PAGES_LEGALES[0];
  return (
    <div className="fixed inset-0 z-[200] voile-fonce backdrop-blur-sm flex items-center justify-center p-5" onClick={onClose}>
      <div onClick={(e) => e.stopPropagation()} role="dialog" aria-modal="true" aria-label={infos.titre}
           className="bg-[var(--bg-2)] border border-[var(--line)] rounded-3xl p-6 max-w-[680px] w-full max-h-[85vh] overflow-y-auto relative">
        <button onClick={onClose} aria-label="Fermer"
                className="absolute top-3 right-3 w-9 h-9 rounded-full bg-[var(--bg)] flex items-center justify-center hover:bg-[var(--bg-3)]">
          <Icon.Close className="w-4 h-4"/>
        </button>
        <h3 className="font-display text-2xl text-[var(--cream)] pr-10">{infos.titre}</h3>
        <div className="mt-3 flex gap-2 flex-wrap">
          {PAGES_LEGALES.filter(p => p.cle !== infos.cle).map(p => (
            <button key={p.cle} onClick={() => onChange(p.cle)}
                    className="text-[11px] px-3 py-1 rounded-full border border-[var(--line)] text-[var(--muted)] hover:text-[var(--cream)]">
              {p.titre}
            </button>
          ))}
        </div>
        <ContenuLegal page={infos.cle}/>
        <p className="mt-6 text-[11px] text-[var(--muted)]">Dernière mise à jour : octobre 2026.</p>
      </div>
    </div>
  );
}

Object.assign(window, { PAGES_LEGALES, PageLegale });
