// ============ AI ASSISTANT (scripted, with confirm-before-act) ============
const { useState: useStateA, useRef: useRefA, useEffect: useEffectA } = React;

// crude intent parser → proposed action (never acts directly)
function parseIntent(text, devices) {
  const t = text.toLowerCase();
  const tempMatch = t.match(/(\d{2})\s*°?/);
  const target = tempMatch ? Math.min(30, Math.max(16, +tempMatch[1])) : null;

  const off = /(coup|étein|eteint|arrêt|arret|vide|éteins|stop)/.test(t);
  const heat = /(chauff|chaud|hiver)/.test(t);
  const cool = /(froid|rafra|clim)/.test(t);

  // scope
  // Only air conditioners take these orders.
  let scope = devices.filter(d => d.online && (d.kind || "ir") === "ir");
  let scopeLabel = "tous les appareils";
  if (/studio/.test(t)) { scope = scope.filter(d => /Studio/.test((STData.unitById(d.unit) || {}).name)); scopeLabel = "les studios"; }
  else if (/suite/.test(t)) { scope = scope.filter(d => /Suite/.test((STData.unitById(d.unit) || {}).name)); scopeLabel = "les suites"; }
  else if (/guéliz|gueliz|résidence|residence/.test(t)) { scope = scope.filter(d => d.unit.startsWith("g")); scopeLabel = "la Résidence Guéliz"; }
  else if (/médina|medina|riad/.test(t)) { scope = scope.filter(d => d.unit.startsWith("u")); scopeLabel = "le Riad Médina"; }
  else if (/vide|inocc|libre/.test(t)) {
    scope = scope.filter(d => { const u = STData.unitById(d.unit); return u && (u.status === "vacant" || u.status === "maintenance"); });
    scopeLabel = "les logements vides";
  }

  if (off) {
    return { patch: { power: false }, ids: scope.map(d => d.id), summary: `Éteindre ${scope.length} appareil(s) — ${scopeLabel}`, reply: `Je propose d'éteindre la climatisation de ${scopeLabel} (${scope.length} appareil${scope.length > 1 ? "s" : ""}). Confirmez pour appliquer.` };
  }
  if (target || heat || cool) {
    const mode = heat ? "heat" : "cool";
    return { patch: { power: true, mode, ...(target ? { target } : {}) }, ids: scope.map(d => d.id),
      summary: `${STData.modeLabel(mode)}${target ? " · " + target + "°C" : ""} — ${scope.length} appareil(s)`,
      reply: `D'accord — régler ${scopeLabel} en mode ${STData.modeLabel(mode).toLowerCase()}${target ? " à " + target + " °C" : ""} (${scope.length} appareil${scope.length > 1 ? "s" : ""}). Confirmez pour appliquer.` };
  }
  return { reply: "Je peux régler la température, changer de mode ou éteindre des appareils par logement, par résidence ou par statut. Par exemple : « Mets tous les studios à 22° » ou « Coupe la clim des logements vides »." };
}

function Assistant({ devices, onCommand }) {
  const [msgs, setMsgs] = useStateA([
    { who: "a", text: "Bonjour 👋 Je suis l'assistant Smart Tiguemi. Dites-moi ce que vous souhaitez régler — je vous proposerai une action à confirmer." },
  ]);
  const [input, setInput] = useStateA("");
  const scroller = useRefA(null);

  useEffectA(() => { if (scroller.current) scroller.current.scrollTop = scroller.current.scrollHeight; }, [msgs]);

  const suggestions = [
    "Mets tous les studios à 22°",
    "Coupe la clim des logements vides",
    "Préchauffe la Suite 305 à 23°",
  ];

  const send = (text) => {
    const q = (text || input).trim();
    if (!q) return;
    const intent = parseIntent(q, devices);
    const next = [{ who: "u", text: q }, { who: "a", text: intent.reply, action: (intent.ids && intent.ids.length) ? intent : null }];
    setMsgs(m => [...m, ...next]);
    setInput("");
  };

  const apply = (action, idx) => {
    action.ids.forEach(id => onCommand(id, action.patch, true));
    setMsgs(m => m.map((msg, i) => i === idx ? { ...msg, applied: true, action: null } : msg));
    setMsgs(m => [...m, { who: "a", text: `✓ Fait — ${action.ids.length} appareil${action.ids.length > 1 ? "s" : ""} mis à jour.` }]);
  };
  const cancel = (idx) => setMsgs(m => m.map((msg, i) => i === idx ? { ...msg, action: null, text: msg.text + "\n(Annulé.)" } : msg));

  return React.createElement("div", { className: "view view-narrow asst-view" },
    React.createElement("div", { className: "view-head" },
      React.createElement("div", null,
        React.createElement("h1", { className: "serif view-title" }, "Assistant"),
        React.createElement("p", { className: "view-sub" }, "Pilotez en langage naturel — l'assistant propose, vous confirmez")
      ),
      React.createElement("span", { className: "asst-badge" }, React.createElement(Icon, { name: "sparkle", size: 13 }), "IA")
    ),
    React.createElement("div", { className: "chat", ref: scroller },
      msgs.map((m, i) => React.createElement("div", { key: i, className: "msg msg-" + m.who },
        m.who === "a" && React.createElement("span", { className: "msg-av" }, React.createElement(Icon, { name: "sparkle", size: 14 })),
        React.createElement("div", { className: "msg-body" },
          React.createElement("div", { className: "msg-bubble" }, m.text),
          m.action && React.createElement("div", { className: "action-card" },
            React.createElement("div", { className: "ac-top" },
              React.createElement(Icon, { name: "thermo", size: 16, className: "ac-ic" }),
              React.createElement("span", { className: "ac-summary" }, m.action.summary)
            ),
            React.createElement("div", { className: "ac-btns" },
              React.createElement("button", { className: "btn btn-primary btn-sm", onClick: () => apply(m.action, i) }, "Confirmer"),
              React.createElement("button", { className: "btn btn-ghost btn-sm", onClick: () => cancel(i) }, "Annuler")
            )
          ),
          m.applied && React.createElement("div", { className: "ac-done mono" }, "✓ appliqué")
        )
      ))
    ),
    React.createElement("div", { className: "chat-suggest" },
      suggestions.map((s, i) => React.createElement("button", { key: i, className: "sugg", onClick: () => send(s) }, s))
    ),
    React.createElement("div", { className: "chat-input" },
      React.createElement("input", { className: "fld", placeholder: "Écrivez votre demande…", value: input,
        onChange: e => setInput(e.target.value), onKeyDown: e => e.key === "Enter" && send() }),
      React.createElement("button", { className: "send-btn", onClick: () => send() }, React.createElement(Icon, { name: "send", size: 17 }))
    )
  );
}

window.Assistant = Assistant;
