/* ══════════ Fideliio — composants partagés ══════════ */

// Contexte pour ouvrir la modale de rendez-vous depuis n'importe quelle section
const RdvContext = React.createContext({ open: () => {} });

// ── Jeu d'icônes (line icons, style Lucide) ──
const ICON_PATHS = {
  "arrow-right": '<path d="M5 12h14"/><path d="m12 5 7 7-7 7"/>',
  "arrow-left": '<path d="M19 12H5"/><path d="m12 19-7-7 7-7"/>',
  check: '<polyline points="20 6 9 17 4 12"/>',
  coffee: '<path d="M17 8h1a4 4 0 1 1 0 8h-1"/><path d="M3 8h14v9a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4z"/><line x1="6" x2="6" y1="2" y2="4"/><line x1="10" x2="10" y1="2" y2="4"/><line x1="14" x2="14" y1="2" y2="4"/>',
  wine: '<path d="M8 22h8"/><path d="M7 10h10"/><path d="M12 15v7"/><path d="M12 15a5 5 0 0 0 5-5c0-2-.5-4-1-8H8c-.5 4-1 6-1 8a5 5 0 0 0 5 5Z"/>',
  qr: '<rect width="5" height="5" x="3" y="3" rx="1"/><rect width="5" height="5" x="16" y="3" rx="1"/><rect width="5" height="5" x="3" y="16" rx="1"/><path d="M21 16h-3a2 2 0 0 0-2 2v3"/><path d="M21 21v.01"/><path d="M12 7v3a2 2 0 0 1-2 2H7"/><path d="M3 12h.01"/><path d="M12 3h.01"/><path d="M12 16v.01"/><path d="M16 12h1"/><path d="M21 12v.01"/><path d="M12 21v-1"/>',
  zap: '<polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/>',
  gift: '<rect x="3" y="8" width="18" height="4" rx="1"/><path d="M12 8v13"/><path d="M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7"/><path d="M7.5 8a2.5 2.5 0 0 1 0-5A4.8 8 0 0 1 12 8a4.8 8 0 0 1 4.5-5 2.5 2.5 0 0 1 0 5"/>',
  users: '<path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M22 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/>',
  message: '<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>',
  chart: '<polyline points="22 7 13.5 15.5 8.5 10.5 2 17"/><polyline points="16 7 22 7 22 13"/>',
  wallet: '<path d="M21 12V7H5a2 2 0 0 1 0-4h14v4"/><path d="M3 5v14a2 2 0 0 0 2 2h16v-5"/><path d="M18 12a2 2 0 0 0 0 4h4v-4Z"/>',
  palette: '<circle cx="13.5" cy="6.5" r=".5" fill="currentColor"/><circle cx="17.5" cy="10.5" r=".5" fill="currentColor"/><circle cx="8.5" cy="7.5" r=".5" fill="currentColor"/><circle cx="6.5" cy="12.5" r=".5" fill="currentColor"/><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z"/>',
  lock: '<rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/>',
  sparkles: '<path d="m12 3-1.9 5.8a2 2 0 0 1-1.3 1.3L3 12l5.8 1.9a2 2 0 0 1 1.3 1.3L12 21l1.9-5.8a2 2 0 0 1 1.3-1.3L21 12l-5.8-1.9a2 2 0 0 1-1.3-1.3z"/>',
  plus: '<path d="M12 5v14"/><path d="M5 12h14"/>',
  mail: '<rect width="20" height="16" x="2" y="4" rx="2"/><path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"/>',
  building: '<rect width="16" height="20" x="4" y="2" rx="2"/><path d="M9 22v-4h6v4"/><path d="M8 6h.01"/><path d="M16 6h.01"/><path d="M12 6h.01"/><path d="M12 10h.01"/><path d="M12 14h.01"/><path d="M16 10h.01"/><path d="M16 14h.01"/><path d="M8 10h.01"/><path d="M8 14h.01"/>',
  phone: '<path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/>',
  calendar: '<rect width="18" height="18" x="3" y="4" rx="2"/><path d="M3 10h18"/><path d="M8 2v4"/><path d="M16 2v4"/>',
  x: '<path d="M18 6 6 18"/><path d="m6 6 12 12"/>',
  shield: '<path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/>',
};
const SOLID_ICONS = { star: '<polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/>' };

function Icon({ name, size = 20, stroke = 2, className, style }) {
  if (SOLID_ICONS[name]) {
    return (
      <svg width={size} height={size} viewBox="0 0 24 24" fill="currentColor"
        className={className} style={style} dangerouslySetInnerHTML={{ __html: SOLID_ICONS[name] }} />
    );
  }
  return (
    <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor"
      strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round"
      className={className} style={style} dangerouslySetInnerHTML={{ __html: ICON_PATHS[name] || "" }} />
  );
}

// ── Bouton ──
function Button({ variant = "primary", size, href, onClick, children, className = "", icon, target, rel }) {
  const cls = `btn btn-${variant}${size === "sm" ? " btn-sm" : ""} ${className}`.trim();
  const inner = (
    <>
      {children}
      {icon && <Icon name={icon} size={18} stroke={2.2} />}
    </>
  );
  if (href) return <a className={cls} href={href} onClick={onClick} target={target} rel={rel}>{inner}</a>;
  return <button className={cls} type="button" onClick={onClick}>{inner}</button>;
}

// ── Logo Fideliio (image de marque) ──
function Brand({ size = 34, href = "#top", onClick }) {
  return (
    <a className="brand" href={href} onClick={onClick}>
      <img className="mark-img" src="brand/fideliio-mark.svg" alt="Fideliio"
        width={size} height={size} style={{ width: size, height: size }} />
      <span className="word">Fideliio</span>
    </a>
  );
}

// ── QR placeholder (SVG) ──
function QRMini() {
  return (
    <svg className="qr" viewBox="0 0 25 25" shapeRendering="crispEdges">
      <rect width="25" height="25" fill="#fff" />
      <g fill="#2A211E">
        <rect x="0" y="0" width="7" height="7" /><rect x="1" y="1" width="5" height="5" fill="#fff" /><rect x="2" y="2" width="3" height="3" />
        <rect x="18" y="0" width="7" height="7" /><rect x="19" y="1" width="5" height="5" fill="#fff" /><rect x="20" y="2" width="3" height="3" />
        <rect x="0" y="18" width="7" height="7" /><rect x="1" y="19" width="5" height="5" fill="#fff" /><rect x="2" y="20" width="3" height="3" />
        <rect x="10" y="2" width="1" height="1" /><rect x="13" y="4" width="1" height="1" /><rect x="11" y="10" width="1" height="1" /><rect x="15" y="12" width="1" height="1" /><rect x="20" y="10" width="1" height="1" /><rect x="10" y="14" width="1" height="1" /><rect x="18" y="18" width="1" height="1" /><rect x="21" y="21" width="1" height="1" /><rect x="9" y="9" width="1" height="1" /><rect x="13" y="9" width="1" height="1" /><rect x="16" y="14" width="1" height="1" /><rect x="12" y="16" width="1" height="1" />
      </g>
    </svg>
  );
}

// ── Boutons « Ajouter au Wallet » (Apple / Google) ──
function WalletButtons() {
  return (
    <div className="wallet-btns">
      <span className="wbtn apple">
        <svg viewBox="0 0 24 24" fill="currentColor" width="15" height="15" aria-hidden="true">
          <path d="M16.365 1.43c0 1.14-.42 2.05-1.13 2.75-.71.7-1.62 1.16-2.5 1.09-.11-1.06.42-2.08 1.09-2.75.72-.72 1.9-1.24 2.54-1.09zM20.5 17.2c-.36.83-.53 1.2-1 1.93-.65 1.02-1.57 2.3-2.71 2.31-1.01.01-1.27-.66-2.64-.65-1.37.01-1.65.66-2.66.65-1.14-.01-2.01-1.16-2.66-2.18-1.82-2.85-2.01-6.2-.89-7.98.8-1.27 2.06-2.01 3.24-2.01 1.2 0 1.96.66 2.95.66.96 0 1.55-.66 2.94-.66 1.05 0 2.16.57 2.95 1.56-2.59 1.42-2.17 5.12.19 6.35z" />
        </svg>
        <span className="wbtn-tx"><small>Ajouter à</small>Apple Wallet</span>
      </span>
      <span className="wbtn google">
        <svg viewBox="0 0 48 48" width="15" height="15" aria-hidden="true">
          <path fill="#EA4335" d="M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z" />
          <path fill="#4285F4" d="M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z" />
          <path fill="#FBBC05" d="M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z" />
          <path fill="#34A853" d="M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z" />
        </svg>
        <span className="wbtn-tx"><small>Ajouter à</small>Google Wallet</span>
      </span>
    </div>
  );
}

Object.assign(window, { RdvContext, Icon, Button, Brand, QRMini, WalletButtons });
