/* =============================================================
   Sentinel — Command Center engine
   Data (shortcuts, suggestions) + rich in-chat response renderer.
   Reuses Icon + ProviderMarkHF from hi-fi/components.jsx (global).
   Exposes: CC_SHORTCUTS, CC_SUGGESTIONS, CC_INTENTS, AssistantResponse, TypingDots
   ============================================================= */

// ---- Function shortcuts (the Genspark-style presets) ----
const CC_SHORTCUTS = [
  { id: 'audit',      icon: 'bot',           title: 'Auditer le parc',        sub: '142 agents · posture & risques', prompt: 'Audite mon parc d’agents et liste ceux à risque.' },
  { id: 'report',     icon: 'fileCheck',     title: 'Rapport AI Act',         sub: 'Conformité AI Act / RGPD',       prompt: 'Génère un rapport de conformité AI Act pour le trimestre.' },
  { id: 'incident',   icon: 'shield',        title: 'Enquêter un incident',   sub: 'Investigation guidée',           prompt: 'Enquête sur l’incident de sécurité ouvert ce matin.' },
  { id: 'policy',     icon: 'fileText',      title: 'Créer une policy',       sub: 'Garde-fous & règles',            prompt: 'Crée une policy qui bloque l’exfiltration de données clients.' },
  { id: 'killswitch', icon: 'power',         title: 'Kill switch',            sub: 'Isoler un agent',                prompt: 'Active le kill switch sur l’agent Recouvrement-RAG.' },
  { id: 'comex',      icon: 'trendingUp',    title: 'Synthèse COMEX',         sub: 'Brief exécutif',                 prompt: 'Prépare une synthèse exécutive pour le COMEX.' },
];

const CC_SUGGESTIONS = [
  { icon: 'activity', text: 'Quels agents ont consommé le plus de tokens cette semaine ?', intent: 'audit' },
  { icon: 'alertTriangle', text: 'Montre-moi les 3 alertes de sécurité non traitées', intent: 'incident' },
  { icon: 'fileCheck', text: 'Où en est le dossier DPIA de l’agent Crédit-Scoring ?', intent: 'report' },
  { icon: 'link2', text: 'Connecte un nouvel agent depuis Azure AI Foundry', intent: 'policy' },
];

// =============================================================
//  Rich response renderer
// =============================================================

const TypingDots = () => (
  <div className="cc-typing" aria-label="Assistant rédige une réponse">
    <i></i><i></i><i></i>
  </div>
);

// small status chip
const CCChip = ({ tone = 'info', children }) => (
  <span className={`chip ${tone}`}><span className="dot"></span>{children}</span>
);

// ---- AUDIT response ----
const AT_RISK = [
  { name: 'Recouvrement-RAG', id: 'agt_8841', provider: 'Anthropic', score: '72', tone: 'crit', why: 'Accès non scellé à la base clients' },
  { name: 'Assistant-KYC', id: 'agt_2207', provider: 'Azure OpenAI', score: '64', tone: 'warn', why: 'DPIA expirée depuis 12 j' },
  { name: 'Synthèse-Crédit', id: 'agt_5510', provider: 'Mistral AI', score: '58', tone: 'warn', why: 'Pas de policy de sortie' },
];

function RespAudit({ onAction }) {
  return (
    <>
      <div className="cc-assistant-text">
        J’ai passé en revue les <strong>142 agents</strong> du tenant Banque Aurore. La posture
        globale est <strong>saine (87 %)</strong>, mais <strong>3 agents</strong> requièrent une
        action sous 48 h.
      </div>
      <div className="cc-kpi-strip">
        <div className="cc-kpi"><div className="k-label">Agents actifs</div><div className="k-val">142</div></div>
        <div className="cc-kpi"><div className="k-label">Posture</div><div className="k-val">87<small>%</small></div></div>
        <div className="cc-kpi alert"><div className="k-label">À risque</div><div className="k-val">3</div></div>
        <div className="cc-kpi"><div className="k-label">Conformes AI Act</div><div className="k-val">96<small>%</small></div></div>
      </div>
      <div className="cc-result-card">
        <div className="cc-result-head">
          <span className="t">Agents à traiter en priorité</span>
          <CCChip tone="crit">3 alertes</CCChip>
        </div>
        {AT_RISK.map(a => (
          <div className="cc-agent-row" key={a.id}>
            <div className="who">
              <ProviderMarkHF name={a.provider} size={34} radius={8} />
              <div>
                <b>{a.name}</b>
                <div className="meta">{a.id} · {a.provider}</div>
              </div>
            </div>
            <div style={{ flex: 1.2, minWidth: 0 }}>
              <CCChip tone={a.tone}>{a.why}</CCChip>
            </div>
            <div className="score">risque {a.score}</div>
          </div>
        ))}
      </div>
      <div className="cc-actions">
        <button className="cc-act primary" onClick={() => onAction('open-parc')}><Icon name="bot" size={14} />Ouvrir le parc</button>
        <button className="cc-act" onClick={() => onAction('report')}><Icon name="fileCheck" size={14} />Générer le rapport</button>
        <button className="cc-act danger" onClick={() => onAction('isolate')}><Icon name="power" size={14} />Isoler les 3 agents</button>
      </div>
    </>
  );
}

// ---- AI Act report response ----
const REPORT_CHECK = [
  { st: 'ok',   t: 'Registre des systèmes d’IA', c: '142 / 142 agents inventoriés et classés par niveau de risque.' },
  { st: 'ok',   t: 'Classification du risque', c: '4 systèmes « haut risque » identifiés (scoring crédit, KYC).' },
  { st: 'warn', t: 'Analyses d’impact (DPIA)', c: '2 DPIA à renouveler avant le 30/06.' },
  { st: 'todo', t: 'Documentation technique', c: 'Génération automatique prête — validation humaine requise.' },
];

function RespReport({ onAction }) {
  return (
    <>
      <div className="cc-assistant-text">
        Voici l’état de conformité <strong>AI Act</strong> consolidé sur le périmètre France.
        Le dossier est <strong>prêt à 85 %</strong> — il reste 2 DPIA à renouveler.
      </div>
      <div className="cc-result-card">
        <div className="cc-result-head">
          <span className="t">Rapport AI Act · T2 2026</span>
          <span className="cc-mono-cap">généré il y a 4 s</span>
        </div>
        <div className="cc-check">
          {REPORT_CHECK.map((r, i) => (
            <div className="cc-check-item" key={i}>
              <span className={`badge ${r.st}`}>
                {r.st === 'ok' ? <Icon name="check" size={12} /> : r.st === 'warn' ? <Icon name="alertTriangle" size={11} /> : <Icon name="plus" size={12} />}
              </span>
              <div className="ctx"><b>{r.t}</b> — {r.c}</div>
            </div>
          ))}
        </div>
      </div>
      <div className="cc-actions">
        <button className="cc-act primary" onClick={() => onAction('export-pdf')}><Icon name="download" size={14} />Exporter le dossier (PDF)</button>
        <button className="cc-act" onClick={() => onAction('open-registry')}><Icon name="fileCheck" size={14} />Ouvrir le registre</button>
        <button className="cc-act" onClick={() => onAction('renew-dpia')}><Icon name="fileText" size={14} />Renouveler les DPIA</button>
      </div>
    </>
  );
}

// ---- Incident response ----
const INCIDENT_TIMELINE = [
  { t: '08:14', e: 'Pic d’appels sortants vers un domaine non autorisé', tone: 'crit' },
  { t: '08:14', e: 'Policy « no-exfil » déclenchée — requêtes bloquées', tone: 'pos' },
  { t: '08:15', e: 'Agent Recouvrement-RAG placé en quarantaine auto', tone: 'info' },
];

function RespIncident({ onAction }) {
  return (
    <>
      <div className="cc-assistant-text">
        L’incident <strong>SE-2406</strong> concerne l’agent <strong>Recouvrement-RAG</strong>.
        Une tentative d’exfiltration a été <strong>bloquée automatiquement</strong> à 08:14.
        L’agent est en quarantaine ; aucune donnée n’est sortie.
      </div>
      <div className="cc-kpi-strip" style={{ gridTemplateColumns: 'repeat(3, 1fr)' }}>
        <div className="cc-kpi alert"><div className="k-label">Sévérité</div><div className="k-val" style={{ fontSize: 'var(--text-xl)' }}>Élevée</div></div>
        <div className="cc-kpi"><div className="k-label">Statut</div><div className="k-val" style={{ fontSize: 'var(--text-xl)' }}>Contenu</div></div>
        <div className="cc-kpi"><div className="k-label">Données sorties</div><div className="k-val">0</div></div>
      </div>
      <div className="cc-result-card">
        <div className="cc-result-head">
          <span className="t">Chronologie · SE-2406</span>
          <CCChip tone="info">automatique</CCChip>
        </div>
        {INCIDENT_TIMELINE.map((r, i) => (
          <div className="cc-agent-row" key={i}>
            <span className="cc-mono-cap" style={{ minWidth: 42 }}>{r.t}</span>
            <div className="who" style={{ flex: 1 }}><span style={{ fontSize: 'var(--text-sm)', color: 'var(--fg)' }}>{r.e}</span></div>
            <CCChip tone={r.tone}>{r.tone === 'crit' ? 'menace' : r.tone === 'pos' ? 'bloqué' : 'action'}</CCChip>
          </div>
        ))}
      </div>
      <div className="cc-actions">
        <button className="cc-act primary" onClick={() => onAction('open-incident')}><Icon name="shield" size={14} />Ouvrir l’incident</button>
        <button className="cc-act" onClick={() => onAction('postmortem')}><Icon name="fileText" size={14} />Générer le post-mortem</button>
        <button className="cc-act danger" onClick={() => onAction('keep-isolated')}><Icon name="power" size={14} />Maintenir l’isolement</button>
      </div>
    </>
  );
}

// ---- Policy response ----
function RespPolicy({ onAction }) {
  return (
    <>
      <div className="cc-assistant-text">
        J’ai rédigé une policy <strong>« Anti-exfiltration données clients »</strong>. Elle s’applique
        aux <strong>38 agents</strong> ayant accès au référentiel client et bloque toute sortie vers
        un domaine non listé.
      </div>
      <div className="cc-result-card">
        <div className="cc-result-head">
          <span className="t">Brouillon de policy</span>
          <CCChip tone="warn">non publiée</CCChip>
        </div>
        <div className="cc-check">
          <div className="cc-check-item"><span className="badge ok"><Icon name="check" size={12} /></span><div className="ctx"><b>Déclencheur</b> — appel réseau sortant contenant des PII</div></div>
          <div className="cc-check-item"><span className="badge ok"><Icon name="check" size={12} /></span><div className="ctx"><b>Action</b> — bloquer + journaliser + notifier le RSSI</div></div>
          <div className="cc-check-item"><span className="badge warn"><Icon name="alertTriangle" size={11} /></span><div className="ctx"><b>Portée</b> — 38 agents · revue humaine recommandée avant publication</div></div>
        </div>
      </div>
      <div className="cc-actions">
        <button className="cc-act primary" onClick={() => onAction('simulate')}><Icon name="activity" size={14} />Simuler l’impact</button>
        <button className="cc-act" onClick={() => onAction('edit-policy')}><Icon name="fileText" size={14} />Éditer la policy</button>
        <button className="cc-act" onClick={() => onAction('publish')}><Icon name="check" size={14} />Publier</button>
      </div>
    </>
  );
}

// ---- Kill switch response ----
function RespKill({ onAction }) {
  return (
    <>
      <div className="cc-assistant-text">
        ⚠️ Action sensible. Le kill switch va <strong>suspendre immédiatement</strong> l’agent
        <strong> Recouvrement-RAG</strong> (agt_8841), révoquer ses jetons et figer ses connecteurs.
        Cette action est tracée dans la piste d’audit.
      </div>
      <div className="cc-result-card">
        <div className="cc-result-head">
          <span className="t">Confirmation requise</span>
          <CCChip tone="crit">irréversible 5 min</CCChip>
        </div>
        <div className="cc-check">
          <div className="cc-check-item"><span className="badge warn"><Icon name="bot" size={11} /></span><div className="ctx"><b>Agent</b> — Recouvrement-RAG · 4 connecteurs actifs</div></div>
          <div className="cc-check-item"><span className="badge warn"><Icon name="user" size={11} /></span><div className="ctx"><b>Impact</b> — 2 workflows en cours seront interrompus</div></div>
          <div className="cc-check-item"><span className="badge todo"><Icon name="lock" size={11} /></span><div className="ctx"><b>Validation</b> — signature RSSI (Léa Mercier)</div></div>
        </div>
      </div>
      <div className="cc-actions">
        <button className="cc-act danger" onClick={() => onAction('confirm-kill')}><Icon name="power" size={14} />Confirmer le kill switch</button>
        <button className="cc-act" onClick={() => onAction('cancel')}>Annuler</button>
      </div>
    </>
  );
}

// ---- COMEX synthesis response ----
function RespComex({ onAction }) {
  return (
    <>
      <div className="cc-assistant-text">
        Voici le brief <strong>COMEX</strong> de la semaine. Le parc d’IA crée de la valeur sans
        dérive de risque : <strong>+18 %</strong> d’usage, posture maîtrisée, conformité au vert.
      </div>
      <div className="cc-kpi-strip">
        <div className="cc-kpi"><div className="k-label">Agents en prod</div><div className="k-val">142</div></div>
        <div className="cc-kpi"><div className="k-label">Usage / sem.</div><div className="k-val">+18<small>%</small></div></div>
        <div className="cc-kpi"><div className="k-label">Incidents</div><div className="k-val">0</div></div>
        <div className="cc-kpi"><div className="k-label">Coût / mois</div><div className="k-val">38<small>k€</small></div></div>
      </div>
      <div className="cc-result-card">
        <div className="cc-result-head"><span className="t">Trois points pour le COMEX</span></div>
        <div className="cc-check">
          <div className="cc-check-item"><span className="badge ok"><Icon name="check" size={12} /></span><div className="ctx"><b>Création de valeur</b> — recouvrement automatisé : 1,2 M€ traités, +9 pts de productivité.</div></div>
          <div className="cc-check-item"><span className="badge ok"><Icon name="check" size={12} /></span><div className="ctx"><b>Risque maîtrisé</b> — 1 tentative d’exfiltration bloquée, 0 fuite, 0 incident ouvert.</div></div>
          <div className="cc-check-item"><span className="badge warn"><Icon name="alertTriangle" size={11} /></span><div className="ctx"><b>Point d’attention</b> — 2 DPIA à renouveler avant l’audit du 30/06.</div></div>
        </div>
      </div>
      <div className="cc-actions">
        <button className="cc-act primary" onClick={() => onAction('export-deck')}><Icon name="download" size={14} />Exporter en slides</button>
        <button className="cc-act" onClick={() => onAction('schedule')}><Icon name="fileText" size={14} />Planifier l’envoi hebdo</button>
      </div>
    </>
  );
}

const CC_INTENTS = {
  audit:      { render: RespAudit },
  report:     { render: RespReport },
  incident:   { render: RespIncident },
  policy:     { render: RespPolicy },
  killswitch: { render: RespKill },
  comex:      { render: RespComex },
};

// Resolve a free-text message to an intent (very light keyword match for the demo)
function ccResolveIntent(text) {
  const t = (text || '').toLowerCase();
  if (/(kill|isol|suspend|coupe)/.test(t)) return 'killswitch';
  if (/(incident|exfil|attaque|alerte|enqu)/.test(t)) return 'incident';
  if (/(rapport|ai act|rgpd|dpia|conform|registre)/.test(t)) return 'report';
  if (/(policy|règle|garde-fou|bloqu)/.test(t)) return 'policy';
  if (/(comex|synth|exécutif|brief|board)/.test(t)) return 'comex';
  return 'audit';
}

const AssistantResponse = ({ intent, onAction }) => {
  const def = CC_INTENTS[intent] || CC_INTENTS.audit;
  const R = def.render;
  return <R onAction={onAction} />;
};

Object.assign(window, {
  CC_SHORTCUTS, CC_SUGGESTIONS, CC_INTENTS, TypingDots, AssistantResponse, ccResolveIntent,
});
