// PAGE CUEILLETTE — panier de récolte du mois, groupé par zone du jardin d'Opio,
// en checklist cochable. Logique pure dans components/cueillette.js (buildPanier,
// clés) ; ici : rendu + localStorage (clé mensuelle → repart vierge chaque mois).
//
// Page volontairement ABSENTE de la barre de nav — on y accède par la ligne
// « À récolter ce mois-ci » de l'Accueil et le bandeau de zone du Catalogue.
// Pensée téléphone en main, debout dans le jardin : toute la ligne coche, le
// nom seul ouvre la fiche.
(function () {
  // Une ligne cochable : case + nom (→ fiche) + latin. Cliquer la ligne coche ;
  // cliquer le nom ouvre la fiche (stopPropagation).
  function LigneCueillette({ p, coche, onToggle, onOpen, isMobile }) {
    return (
      <div
        role="checkbox"
        aria-checked={coche}
        tabIndex={0}
        onClick={onToggle}
        onKeyDown={(e) => { if (e.key === "Enter" || e.key === " ") { e.preventDefault(); onToggle(); } }}
        style={{
          display: "flex", alignItems: "center", gap: isMobile ? 14 : 18, cursor: "pointer",
          padding: isMobile ? "13px 2px" : "14px 4px", borderBottom: "1px solid var(--line)",
          opacity: coche ? 0.55 : 1,
        }}>
        <span aria-hidden="true" style={{
          width: 22, height: 22, flex: "0 0 22px", border: "1px solid var(--moss-deep)",
          display: "inline-flex", alignItems: "center", justifyContent: "center",
          background: coche ? "var(--moss-deep)" : "transparent",
          color: "#f1ead9", fontSize: 14, lineHeight: 1,
        }}>{coche ? "✓" : ""}</span>
        <span style={{ flex: 1, minWidth: 0 }}>
          <button
            onClick={(e) => { e.stopPropagation(); onOpen(p.id); }}
            className="h-display"
            style={{
              background: "none", border: "none", padding: 0, cursor: "pointer",
              fontSize: isMobile ? 18 : 21, color: "var(--ink)", textAlign: "left",
              textDecoration: coche ? "line-through" : "none", textDecorationThickness: 1,
            }}>
            {p.nom}
          </button>
          {p.latin && (
            <span style={{ fontFamily: "var(--serif)", fontStyle: "italic", fontSize: isMobile ? 13 : 15, color: "var(--ink-mute)", marginLeft: 10 }}>
              {p.latin}
            </span>
          )}
        </span>
      </div>
    );
  }

  function Cueillette({ setRoute, setPlantId }) {
    const isMobile = useMobile();
    const pad = isMobile ? "0 20px" : "0 40px";
    const moisNom = window.MOIS_FR[new Date().getMonth()];
    const panier = React.useMemo(() => window.buildPanier(window.PLANTS || [], moisNom), [moisNom]);
    const storageKey = window.cueilletteStorageKey();

    const [coches, setCoches] = React.useState(() => {
      try { return new Set(JSON.parse(localStorage.getItem(storageKey) || "[]")); }
      catch { return new Set(); }
    });

    // Purge des paniers des mois passés (la clé courante porte le mois).
    React.useEffect(() => {
      try {
        for (let i = localStorage.length - 1; i >= 0; i--) {
          const k = localStorage.key(i);
          if (k && k.indexOf("cueillette-") === 0 && k !== storageKey) localStorage.removeItem(k);
        }
      } catch {}
    }, [storageKey]);

    const toggle = (key) => setCoches((prev) => {
      const next = new Set(prev);
      if (next.has(key)) next.delete(key); else next.add(key);
      try { localStorage.setItem(storageKey, JSON.stringify([...next])); } catch {}
      return next;
    });

    const goFiche = (id) => { setPlantId(id); setRoute("fiche"); };

    // Compteur : ne compte que les clés encore présentes dans le panier du mois
    // (une plante dé-taguée entre-temps ne fausse pas le total).
    const clesDuMois = [
      ...panier.zones.flatMap((g) => g.items.map((p) => window.cueilletteItemKey(p.id, g.zone))),
      ...panier.horsZone.map((p) => window.cueilletteItemKey(p.id)),
    ];
    const faites = clesDuMois.filter((k) => coches.has(k)).length;

    const Groupe = ({ titre, items, zone }) => (
      <div style={{ marginBottom: isMobile ? 34 : 48 }}>
        <div style={{ display: "flex", alignItems: "baseline", gap: 14, marginBottom: 4 }}>
          <h2 style={{ fontFamily: "var(--mono)", fontSize: isMobile ? 11 : 12, letterSpacing: ".18em", textTransform: "uppercase", color: "var(--moss-deep)", margin: 0 }}>{titre}</h2>
          <span style={{ flex: 1, borderTop: "1px solid var(--line)" }} />
          <span style={{ fontFamily: "var(--mono)", fontSize: 10, color: "var(--ink-mute)", letterSpacing: ".14em" }}>{items.length}</span>
        </div>
        {items.map((p) => {
          const k = window.cueilletteItemKey(p.id, zone);
          return <LigneCueillette key={k} p={p} coche={coches.has(k)} onToggle={() => toggle(k)} onOpen={goFiche} isMobile={isMobile} />;
        })}
      </div>
    );

    return (
      <main className="page-enter">
        {/* En-tête */}
        <section style={{ padding: isMobile ? "44px 0 20px" : "80px 0 32px" }}>
          <div style={{ maxWidth: 1400, margin: "0 auto", padding: pad }}>
            <div className="kicker" style={{ marginBottom: 18 }}>Cueillette · {moisNom}</div>
            <h1 className="h-display" style={{ fontSize: isMobile ? "clamp(40px, 9vw, 64px)" : "clamp(60px, 8vw, 100px)", lineHeight: 0.95, margin: isMobile ? "0 0 16px" : "0 0 24px", letterSpacing: "-0.02em" }}>
              Le panier <span className="h-italic">du mois</span>.
            </h1>
            {!isMobile && panier.total > 0 && (
              <p style={{ fontFamily: "var(--serif)", fontSize: 22, lineHeight: 1.5, color: "var(--ink-soft)", maxWidth: 720, margin: 0 }}>
                La tournée de récolte de {moisNom.toLowerCase()}, zone par zone — cochez au fil de la cueillette, le panier se souvient jusqu'à la fin du mois.
              </p>
            )}
            {panier.total > 0 && (
              <div style={{ marginTop: isMobile ? 14 : 22, fontFamily: "var(--mono)", fontSize: 12, letterSpacing: ".16em", textTransform: "uppercase", color: "var(--rust)" }}>
                {faites} / {panier.total} cueillie{faites > 1 ? "s" : ""}
              </div>
            )}
          </div>
        </section>

        {/* Checklist par zone (colonne de lecture bornée, comme la prose des fiches) */}
        <section style={{ maxWidth: 1400, margin: "24px auto 0", padding: pad, paddingBottom: isMobile ? 64 : 100 }}>
          {panier.total === 0 ? (
            <p style={{ fontFamily: "var(--serif)", fontSize: 18, fontStyle: "italic", color: "var(--ink-mute)" }}>
              Rien à cueillir en {moisNom.toLowerCase()} — le jardin dort, le recueil aussi.
            </p>
          ) : (
            <div style={{ maxWidth: 860 }}>
              {panier.zones.map((g) => <Groupe key={g.zone} titre={g.zone} items={g.items} zone={g.zone} />)}
              {panier.horsZone.length > 0 && <Groupe titre="Ailleurs au jardin" items={panier.horsZone} zone={null} />}
            </div>
          )}
        </section>
      </main>
    );
  }

  window.Cueillette = Cueillette;
})();
