// features/apaisement — suggestions d'apaisement (IA)
// Transcriptions intégrales des 30 derniers appels ; règle stricte :
// ne rien inventer qui ne soit dans les propos du résident.

function ApaisementCard({ resident: r, locked = false, onUnlockRequest }) {
  const [tips, setTips] = React.useState(null);
  const fallback = () => r.calming && r.calming.length ? r.calming.slice(0, 4).map((c) => `Évoquer ${c.toLowerCase()}`) : ["Parler doucement et calmement", "Évoquer des souvenirs agréables"];
  React.useEffect(() => {
    let alive = true;
    const calm = (r.calming || []).join(', ');
    const resp = (r.directiveResponses || []).map((q) => q.a).join(' ');
    const hist = (r.directiveHistory || []).map((h) => h.a).join(' ');
    // Transcriptions intégrales (mots exacts du résident) plutôt que les résumés :
    // les suggestions doivent s'appuyer sur ce qu'il dit réellement.
    // Limité aux 30 appels les plus récents (r.calls est trié du plus récent au plus ancien).
    const APAIS_NB_APPELS = 30;
    const recents = (r.calls || []).slice(0, APAIS_NB_APPELS);
    const dropped = Math.max(0, (r.calls || []).length - recents.length);
    const calls = recents.map((c) => {
      const tr = (c.transcript || []).map((b) => `${b.speaker === 'livana' ? 'Livana' : r.firstName}: ${b.text}`).join('\n');
      return tr ? `[${c.when}]\n${tr}` : '';
    }).filter(Boolean).join('\n\n');
    const prompt = `Tu es l'agent clinique Livana. À partir des transcriptions d'appels ci-dessous concernant ${r.firstName} ${r.lastName}, propose 3 à 4 SUGGESTIONS D'APAISEMENT concrètes et courtes (max 8 mots chacune) que la psychologue transmettra aux aides-soignants pour désamorcer une situation d'agitation. Chaque suggestion = un sujet/action qui apaise ce résident précis.

RÈGLE ABSOLUE : appuie-toi UNIQUEMENT sur ce que le résident dit réellement dans les transcriptions. N'invente aucun sujet générique (boisson chaude, musique douce…) qui n'apparaît pas dans ses propos. Si les transcriptions ne permettent d'identifier que 1 ou 2 sujets fiables, n'en propose que 1 ou 2.

Réponds UNIQUEMENT par un tableau JSON de chaînes, ex: ["...","..."].

Sujets apaisants déjà connus: ${calm || 'aucun renseigné'}
Réponses aux questions ciblées: ${resp || 'aucune'}
Historique thérapeutique: ${hist || 'aucun'}

TRANSCRIPTIONS DES ${recents.length} DERNIERS APPELS (du plus récent au plus ancien${dropped ? ` ; ${dropped} appels plus anciens non inclus` : ''}) :
${calls || 'Aucune transcription disponible.'}`;
    (async () => {
      try {
        const out = await window.LivanaAPI.aiComplete({ messages: [{ role: 'user', content: prompt }] });
        const m = out.match(/\[[\s\S]*\]/);
        const arr = JSON.parse(m ? m[0] : out);
        if (alive && Array.isArray(arr) && arr.length) setTips(arr.slice(0, 4));else
        if (alive) setTips(fallback());
      } catch (e) {if (alive) setTips(fallback());}
    })();
    return () => {alive = false;};
  }, [r.id]);
  return (
    <div className={`card panel apais-card ${locked ? 'vig-locked' : ''}`}>
      {locked &&
      <div className="vig-gate">
        <div className="vig-gate-ic"><Icon name="lock" size={22} /></div>
        <div className="vig-gate-title">Contenu protégé</div>
        <div className="vig-gate-sub">Saisissez votre code à 4 chiffres pour afficher les suggestions.</div>
        <button className="btn btn-accent btn-sm" onClick={onUnlockRequest}><Icon name="lock" size={14} /> Déverrouiller</button>
      </div>
      }
      <div className="panel-head">
        <h3>Recommandation de sujets d'apaisement</h3>
        <span className="eyebrow">par Livana</span>
      </div>
      <p className="apais-intro">À transmettre aux aides-soignants pour désamorcer une agitation.</p>
      {tips == null ?
      <div className="vig-skel" style={{ padding: '4px 0' }}><span></span><span></span><span></span></div> :
      <div className="apais-list">{tips.map((t, i) =>
        <div key={i} className="apais-item">
            <span className="apais-ic"><Icon name="check" size={13} /></span>
            <span className="apais-tx">{t}</span>
          </div>
      )}</div>}
    </div>);

}

window.ApaisementCard = ApaisementCard;
