/* GUIDKO App — Lia : assistant IA transversal, role-aware.
   Floating button + panel. Real AI via window.claude.complete with graceful fallback.
   Mounted globally so Lia accompagne chaque rôle. */

const LIA_PERSONA = {
  gerant:   { fr: "le gérant d'une auto-école (planning, élèves, rentabilité, marketing, marché auto)", en: "a driving-school manager (schedule, students, profit, marketing, auto market)" },
  accueil:  { fr: "la personne à l'accueil (inscriptions, dossiers, réception des élèves)", en: "the front-desk person (enrollments, files, welcoming students)" },
  moniteur: { fr: "un moniteur (pédagogie, planning, suivi des élèves, gains)", en: "an instructor (teaching, schedule, student tracking, earnings)" },
  eleve:    { fr: "un élève (code de la route, conduite, progression, réservation)", en: "a student (road code, driving, progress, booking)" },
  auto:     { fr: "un utilisateur du marché auto (acheter, vendre, louer, covoiturage, pièces)", en: "an auto-market user (buy, sell, rent, carpool, parts)" },
};

const LIA_CHIPS = {
  gerant:   { fr: ["Comment augmenter mon occupation ?", "Analyse ma rentabilité", "Rédige une relance élève"], en: ["How to raise occupancy?", "Analyze my profit", "Draft a student follow-up"] },
  accueil:  { fr: ["Étapes d'une inscription ?", "Modèle d'email de bienvenue", "Documents pour le permis B"], en: ["Enrollment steps?", "Welcome email template", "Docs for license B"] },
  moniteur: { fr: ["Idées d'exercices manœuvres", "Comment évaluer un élève ?", "Prépare un examen blanc"], en: ["Maneuver drill ideas", "How to assess a student?", "Prep a mock exam"] },
  eleve:    { fr: ["Explique la priorité à droite", "Quiz code sur les panneaux", "Conseils pour l'examen"], en: ["Explain right-of-way", "Code quiz on road signs", "Exam tips"] },
  auto:     { fr: ["Estime le prix de ma voiture", "Rédige mon annonce", "Louer pour mon auto-école ?"], en: ["Estimate my car's price", "Write my listing", "Rent for my school?"] },
};

async function liaComplete(prompt, fallback) {
  try {
    if (window.claude && typeof window.claude.complete === "function") {
      const r = await window.claude.complete(prompt);
      const txt = (r || "").trim();
      return txt || fallback;
    }
  } catch (e) {}
  return fallback;
}

// Co-pilote : actions concrètes que Lia exécute par rôle (≠ simple chat)
const LIA_ACTIONS = {
  gerant: [
    { g: "📅", ic: "schedule", fr: "Optimiser mon planning", en: "Optimize my schedule", say: { fr: "J'ai réorganisé ta semaine : 3 créneaux creux comblés, 2 no-show anticipés. +14% d'occupation estimée.", en: "I reorganized your week: 3 gaps filled, 2 no-shows anticipated. +14% estimated occupancy." } },
    { g: "✉", ic: "messages", fr: "Rédiger une relance élève", en: "Draft a student follow-up", say: { fr: "Brouillon prêt : un message chaleureux pour les 4 élèves inactifs depuis 15 jours. À valider avant envoi — tu gardes la main.", en: "Draft ready: a warm message for 4 students inactive for 15 days. Review before sending — you stay in control." } },
    { g: "📈", ic: "analytics", fr: "Analyser ma rentabilité", en: "Analyze my profit", nav: "/gerant/analytics", say: { fr: "Ouverture de tes analytics. Point clé : la marge moniteur est de 62%, ta voiture #2 est sous-exploitée — propose-la en location.", en: "Opening your analytics. Key point: instructor margin is 62%, car #2 is underused — list it for rental." } },
  ],
  accueil: [
    { g: "📝", ic: "contracts", fr: "Préparer une inscription", en: "Prepare an enrollment", say: { fr: "Checklist générée : pièce d'identité, ASSR, photo, justificatif. J'ai pré-rempli le dossier — il te reste à vérifier.", en: "Checklist generated: ID, ASSR, photo, proof. I pre-filled the file — just verify it." } },
    { g: "✉", ic: "messages", fr: "Email de bienvenue", en: "Welcome email", say: { fr: "Brouillon prêt, personnalisé au prénom de l'élève et à son forfait. Tu valides ?", en: "Draft ready, personalized with the student's name and package. Approve?" } },
  ],
  moniteur: [
    { g: "🎯", ic: "target", fr: "Plan de leçon du jour", en: "Today's lesson plan", say: { fr: "Pour Léa (niveau créneaux) : 15 min manœuvres, 30 min ville, 15 min bilan. J'ai noté ses points faibles du dernier cours.", en: "For Léa (parking level): 15min maneuvers, 30min city, 15min review. I noted her weak points from last lesson." } },
    { g: "💰", ic: "finance", fr: "Maximiser mes revenus", en: "Maximize my income", nav: "/moniteur/earnings", say: { fr: "Entre tes 2 créneaux libres : un covoiturage Paris→Créteil (+16€) et 2 livraisons sur ta route (+15€). Je te connecte ?", en: "Between your 2 free slots: a Paris→Créteil carpool (+€16) and 2 deliveries on your route (+€15). Shall I connect you?" } },
    { g: "📝", ic: "clipboard", fr: "Préparer un examen blanc", en: "Prep a mock exam", say: { fr: "40 questions ciblées sur les faiblesses de ton élève générées. Lance-le quand tu veux.", en: "40 questions targeting your student's weaknesses generated. Launch anytime." } },
  ],
  eleve: [
    { g: "★", ic: "eleve", fr: "Réviser mon code", en: "Review my code", nav: "/eleve/code", say: { fr: "Série du jour adaptée à tes erreurs : priorités et panneaux. On y va ?", en: "Today's set tailored to your mistakes: right-of-way and signs. Ready?" } },
    { g: "🚗", ic: "schedule", fr: "Réserver une leçon", en: "Book a lesson", nav: "/eleve/book", say: { fr: "Marc est libre jeudi 16h à 350 m de chez toi. Je te le réserve ?", en: "Marc is free Thursday 4pm, 350m from you. Book it?" } },
    { g: "📊", ic: "analytics", fr: "Mon niveau d'examen", en: "My exam readiness", say: { fr: "Tu es à 78% de réussite estimée. Encore 2 points : distances de sécurité et giratoires. On les travaille ?", en: "You're at 78% estimated pass rate. 2 points left: safe distances and roundabouts. Let's work them?" } },
  ],
  auto: [
    { g: "💶", ic: "finance", fr: "Estimer un prix", en: "Estimate a price", say: { fr: "Pour ta Peugeot 208 2021 / 42 000 km : fourchette 11 800–12 900€. Prix conseillé : 12 400€ pour vendre en 2 semaines.", en: "For your 2021 Peugeot 208 / 42,000km: range €11,800–€12,900. Suggested: €12,400 to sell within 2 weeks." } },
    { g: "✉", ic: "edit", fr: "Rédiger mon annonce", en: "Write my listing", nav: "/auto/sell", say: { fr: "Annonce rédigée : titre accrocheur, points forts, photos guidées anti-fraude. À publier.", en: "Listing written: catchy title, highlights, fraud-safe guided photos. Ready to publish." } },
  ],
};

function LiaAssistant({ role = "eleve", navigate }) {
  const C = GK.colors;
  const { t, lang } = useI18n();
  const [open, setOpen] = React.useState(false);
  const [msgs, setMsgs] = React.useState([]);
  const [input, setInput] = React.useState("");
  const [busy, setBusy] = React.useState(false);
  const [mode, setMode] = React.useState("copilot"); // copilot | chat
  const endRef = React.useRef(null);
  React.useEffect(() => { endRef.current?.scrollTo(0, endRef.current.scrollHeight); }, [msgs, busy]);

  const persona = (LIA_PERSONA[role] || LIA_PERSONA.eleve)[lang] || LIA_PERSONA[role].fr;
  const chips = (LIA_CHIPS[role] || LIA_CHIPS.eleve)[lang] || LIA_CHIPS[role].fr;
  const actions = LIA_ACTIONS[role] || LIA_ACTIONS.eleve;

  function runAction(a) {
    setMode("chat");
    if (msgs.length === 0) setMsgs([{ who: "bot", text: greet() }]);
    setMsgs(m => [...m, { who: "me", text: (a[lang] || a.fr) }, { who: "bot", text: (a.say[lang] || a.say.fr) }]);
    if (a.nav && navigate) setTimeout(() => { navigate(a.nav); }, 900);
  }

  function greet() {
    return lang === "fr"
      ? "Salut 👋 Je suis Lia, ton assistante IA GUIDKO. Je t'accompagne dans tout ce que tu fais ici. Comment puis-je t'aider ?"
      : "Hi 👋 I'm Lia, your GUIDKO AI assistant. I'm here for everything you do. How can I help?";
  }

  function openPanel() { setOpen(true); setMode("copilot"); }

  async function send(q) {
    const text = (q != null ? q : input).trim();
    if (!text || busy) return;
    setInput("");
    setMsgs(m => [...m, { who: "me", text }]);
    setBusy(true);
    const langName = lang === "fr" ? "français" : "English";
    const prompt = `Tu es Lia, l'assistante IA de GUIDKO (plateforme mondiale de mobilité : auto-écoles tous permis auto/moto/poids lourd, marché auto achat/vente/location/pièces/covoiturage, multi-pays). Tu accompagnes ${persona}. PRINCIPE : tu es un OUTIL AU SERVICE DES HUMAINS — tu rends les moniteurs, l'accueil et les pros plus efficaces et tu leur fais gagner du temps ; tu ne les remplaces jamais et tu valorises leur métier. Réponds en ${langName}, ton chaleureux, concret et bref (2-4 phrases, listes courtes si utile). Si c'est une question de code de la route, explique clairement le pourquoi. Question : "${text}"`;
    const fb = lang === "fr"
      ? "Je peux t'aider sur la formation (tous permis), la gestion, le marché auto et le code de la route. Reformule ta question et j'y réponds avec plaisir."
      : "I can help with training (all licenses), management, the auto market and the road code. Rephrase and I'll gladly answer.";
    const ans = await liaComplete(prompt, fb);
    setMsgs(m => [...m, { who: "bot", text: ans }]);
    setBusy(false);
  }

  return (
    <>
      {!open && (
        <button onClick={openPanel} style={{
          position: "fixed", bottom: 22, right: 22, zIndex: 700, display: "flex", alignItems: "center", gap: 9,
          padding: "13px 18px", background: C.ink, color: "#fff", border: "none", borderRadius: 999, cursor: "pointer",
          fontFamily: "'Geist', sans-serif", fontSize: 14, fontWeight: 600, boxShadow: "0 12px 40px rgba(11,15,31,0.3)",
        }}>
          <span style={{ width: 22, height: 22, borderRadius: 7, background: C.flame, display: "grid", placeItems: "center", fontSize: 12 }}>✦</span>
          Lia
        </button>
      )}
      {open && (
        <div style={{ position: "fixed", bottom: 22, right: 22, zIndex: 700, width: 380, maxWidth: "92vw", height: 540, maxHeight: "82vh", background: C.paper, border: `1px solid ${C.softLine}`, borderRadius: 18, boxShadow: "0 30px 80px rgba(0,0,0,0.32)", display: "flex", flexDirection: "column", overflow: "hidden", animation: "gkModalIn .18s ease" }}>
          <div style={{ background: C.ink, color: "#fff", padding: "15px 18px", display: "flex", alignItems: "center", gap: 10 }}>
            <span style={{ width: 30, height: 30, borderRadius: 9, background: C.flame, display: "grid", placeItems: "center", fontSize: 14 }}>✦</span>
            <div style={{ flex: 1 }}>
              <div style={{ fontWeight: 600, fontSize: 14 }}>Lia</div>
              <div style={{ fontFamily: "'Geist Mono', monospace", fontSize: 8, color: "#3DE08C", letterSpacing: "0.14em" }}>● {t("CO-PILOTE IA","AI CO-PILOT")}</div>
            </div>
            <button onClick={() => setOpen(false)} style={{ background: "none", border: "none", color: "#fff", fontSize: 20, cursor: "pointer" }}>×</button>
          </div>
          <div ref={endRef} className="gk-scroll" style={{ flex: 1, overflowY: "auto", padding: 16, display: "flex", flexDirection: "column", gap: 10 }}>
            {mode === "copilot" && msgs.length === 0 ? (
              <div>
                <div style={{ fontFamily: "'Geist Mono', monospace", fontSize: 9, letterSpacing: "0.16em", color: C.slate, marginBottom: 10 }}>{t("CE QUE JE PEUX FAIRE POUR TOI","WHAT I CAN DO FOR YOU")}</div>
                <div style={{ display: "flex", flexDirection: "column", gap: 9, marginBottom: 16 }}>
                  {actions.map((a, i) => (
                    <button key={i} onClick={() => runAction(a)} style={{ display: "flex", alignItems: "center", gap: 12, padding: "13px 14px", background: "#fff", border: `1px solid ${C.softLine}`, borderRadius: 12, cursor: "pointer", textAlign: "left", fontFamily: "inherit" }}>
                      <span style={{ width: 34, height: 34, borderRadius: 9, background: C.cream, display: "grid", placeItems: "center", fontSize: 16, color: C.ink, flexShrink: 0 }}>{a.ic && window.hasGKIcon && window.hasGKIcon(a.ic) ? <GKIcon name={a.ic} size={17}/> : a.g}</span>
                      <span style={{ flex: 1, fontSize: 13.5, fontWeight: 600, color: C.ink }}>{a[lang] || a.fr}</span>
                      <span style={{ color: C.flame, fontSize: 15 }}>→</span>
                    </button>
                  ))}
                </div>
                <div style={{ padding: 13, background: C.ink, color: "#fff", borderRadius: 11, fontSize: 12, lineHeight: 1.5 }}>
                  ✨ {t("Je suis un outil à ton service — je te fais gagner du temps, jamais je ne te remplace. Tu valides toujours.","I'm a tool at your service — I save you time, never replace you. You always approve.")}
                </div>
                <button onClick={() => { setMode("chat"); setMsgs([{ who: "bot", text: greet() }]); }} style={{ width: "100%", marginTop: 12, padding: "11px", background: "transparent", border: `1px dashed ${C.softLine}`, borderRadius: 10, color: C.slate, fontSize: 13, fontWeight: 600, cursor: "pointer", fontFamily: "inherit" }}>💬 {t("Ou pose-moi une question","Or ask me anything")}</button>
              </div>
            ) : msgs.map((m, i) => (
              <div key={i} style={{ alignSelf: m.who === "me" ? "flex-end" : "flex-start", maxWidth: "84%", padding: "11px 13px", borderRadius: 13, fontSize: 13.5, lineHeight: 1.45, whiteSpace: "pre-wrap",
                background: m.who === "me" ? C.ink : "#fff", color: m.who === "me" ? "#fff" : C.ink,
                border: m.who === "me" ? "none" : `1px solid ${C.softLine}`,
                borderTopRightRadius: m.who === "me" ? 4 : 13, borderTopLeftRadius: m.who === "me" ? 13 : 4 }}>{m.text}</div>
            ))}
            {busy && <div style={{ alignSelf: "flex-start", padding: "11px 13px", borderRadius: 13, background: "#fff", border: `1px solid ${C.softLine}`, fontSize: 13.5, color: C.slate }}>…</div>}
          </div>
          {mode === "chat" && msgs.length <= 1 && (
            <div style={{ display: "flex", gap: 6, flexWrap: "wrap", padding: "0 14px 10px" }}>
              {chips.map((c, i) => <span key={i} onClick={() => send(c)} style={{ fontSize: 11.5, padding: "6px 10px", background: "#fff", border: `1px solid ${C.softLine}`, borderRadius: 999, cursor: "pointer" }}>{c}</span>)}
            </div>
          )}
          <div style={{ padding: 14, borderTop: `1px solid ${C.softLine}`, display: "flex", gap: 8 }}>
            <input value={input} onChange={e => setInput(e.target.value)} onKeyDown={e => e.key === "Enter" && send()} placeholder={t("Demande à Lia…","Ask Lia…")}
              style={{ flex: 1, padding: "11px 13px", border: `1px solid ${C.softLine}`, borderRadius: 22, fontFamily: "'Geist', sans-serif", fontSize: 13.5, outline: "none" }}/>
            <button onClick={() => send()} disabled={busy} style={{ width: 42, border: "none", background: C.flame, color: "#fff", borderRadius: 22, cursor: "pointer", fontSize: 15, opacity: busy ? 0.5 : 1 }}>→</button>
          </div>
        </div>
      )}
    </>
  );
}

Object.assign(window, { LiaAssistant, liaComplete });
