/* ============================================================
   EDUCARE — Anamnese Completa do Adulto
   Ficha estruturada (Identificação + Partes I–VII), salvar e PDF.
   ============================================================ */
(function () {
  const { useState } = React;
  const Icon = window.Icon;

  const A = (k, label) => ({ k, label, t: "area" });
  const T = (k, label) => ({ k, label });

  const SECTIONS = [
    { title: "Identificação e contato", fields: [
      T("nome", "Nome"), T("idade", "Idade"), T("sexo", "Sexo"),
      T("endereco", "Endereço"), T("telefones", "Telefones para contato"),
      T("bairro", "Bairro"), T("cidade", "Cidade"), T("religiao", "Religião"), T("escolaridade", "Escolaridade"),
      A("filhos", "Filhos (nome, idade e sexo)"),
      T("profissao", "Profissão"), T("estcivil", "Estado civil"), T("conjuge", "Cônjuge (nome, idade e profissão)"),
      A("queixa", "Queixa principal"), T("horarios", "Possibilidade de horários"),
      A("terapiaant", "Fez terapia anteriormente? (qual e quando)"),
      A("expectativas", "Expectativas e objetivos do paciente"),
      A("sintomas", "Sintomas apresentados"),
    ] },
    { title: "Parte I — Diagnóstico", fields: [
      T("eixo1", "Eixo I"), T("eixo2", "Eixo II"), A("eixo3", "Eixo III (doenças físicas)"),
      A("eixo4", "Eixo IV (estressores psicossociais)"), T("eixo5", "Eixo V (funcionamento global)"),
      A("conceituacao", "Conceituação psicológica do caso"),
      T("transt_ant", "Transtornos psiquiátricos anteriores"), A("transt_fam", "Transtornos psiquiátricos familiares"),
      A("doencas", "Doenças importantes que teve"), T("medicacao", "Medicação que está tomando"),
      A("medicacao_alt", "Medicação alternativa (chás, compostos, etc.)"),
      A("testes", "Aplicação de testes? Se sim, qual e resultado"),
    ] },
    { title: "Histórico da queixa", fields: [
      A("inicio", "Quando se iniciou"), A("traumaticos", "Eventos traumáticos de vida"),
      A("precipitantes", "Eventos/fatores que precipitam ou agravam crises"),
      T("drogas", "Uso de drogas?"), T("suicidio", "Tentativa de suicídio?"),
      A("focos", "Focos de intervenção psicoterápica"),
    ] },
    { title: "Parte II — Relacionamentos importantes", fields: [
      A("mae", "Mãe"), A("pai", "Pai"), A("irmaos", "Irmãos"), A("filhos_rel", "Filhos"),
      A("outros_imp", "Outros importantes"), A("dinamica", "Observações sobre a dinâmica familiar atual"),
    ] },
    { title: "Parte III — Infância", fields: [
      A("gravidez", "Gravidez (planejada ou não), parto, intercorrências obstétricas"),
      A("amamentacao", "Amamentação"), A("higiene", "Treinamento de higiene"),
      A("estress_inf", "Estressores na infância, crises"),
      A("transt_inf", "Outros transtornos infantis (sono, alimentação, psicomotor, gagueira, tiques, sonambulismo, aprendizagem)"),
      A("outros_inf", "Outros comentários"),
    ] },
    { title: "Parte IV — Adolescência", fields: [
      A("afetivas", "Experiências afetivas marcantes"), A("sexuais", "Experiências sexuais marcantes"),
      A("independencia", "Independência / primeiros empregos"), A("amizades", "Círculo de amizades"),
    ] },
    { title: "Parte V — Vida adulta", fields: [
      A("rel_parceiro", "Relacionamento com parceiro"), A("vida_sexual", "Vida sexual atual"),
      A("financeira", "Situação financeira"), T("abortos", "Abortos espontâneos/provocados"),
      A("apoio_social", "Apoio social disponível"),
      A("transt_atuais", "Outros transtornos atuais (sono, alimentação, tiques, etc.)"),
      A("lazeres", "Principais lazeres, vida social"),
    ] },
    { title: "Parte VI — Observação e linguagem não verbal", fields: [
      A("observacoes", "Observações"),
    ] },
    { title: "Parte VII — Atendimentos prestados", fields: [
      T("profissional", "Profissional"), A("encaminhamentos", "Encaminhamentos feitos"),
      A("terapeutica", "Terapêutica utilizada (exercícios, leituras, relaxamento, etc.)"),
    ] },
  ];
  const DESTINOS = ["Alta", "Encaminhamento a outra instituição", "Abandono", "Encaminhamento a outro profissional", "Interrompido"];
  const SEXOS = ["Feminino", "Masculino", "Outro"];

  const ALL_FIELDS = SECTIONS.reduce((a, s) => a.concat(s.fields), []);
  const nonEmpty = (v) => v != null && String(v).trim() !== "";
  function esc(s) { return String(s == null ? "" : s).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;"); }

  /* ---------------- Imprimir ficha em branco ---------------- */
  function printBlank() {
    const blank = "________________________________________________________________";
    const secHtml = SECTIONS.map((sec) => `<h2>${esc(sec.title)}</h2>` + sec.fields.map((f) => `<p class="ln"><b>${esc(f.label)}:</b> ${blank}${f.t === "area" ? "<br>" + blank : ""}</p>`).join("")).join("");
    const sessRows = Array.from({ length: 14 }).map(() => `<p class="ln"><b>Data:</b> ___/___/____ &nbsp; <b>Tema:</b> ${blank}</p>`).join("");
    const destino = DESTINOS.map((d) => `<p class="ln">( ) ${esc(d)} ________________________</p>`).join("");
    const html = `<!DOCTYPE html><html lang="pt-BR"><head><meta charset="UTF-8"><title>Anamnese Completa do Adulto</title>
      <style>body{font-family:Arial,Helvetica,sans-serif;color:#000;padding:24px;font-size:11.5px;line-height:1.6}
      h1{font-size:15px;text-align:center;margin:0 0 10px}h2{font-size:12px;margin:16px 0 4px;border-bottom:1px solid #000}
      .ln{margin:3px 0}.sig{margin-top:40px;text-align:center}.sig div{margin-top:36px}</style></head><body>
      <h1>ANAMNESE COMPLETA DO ADULTO</h1>
      ${secHtml}
      <h2>Registro de atendimentos</h2>${sessRows}
      <h2>Destino do caso</h2>${destino}
      <p class="ln"><b>Melhoras obtidas:</b> ${blank}<br>${blank}</p>
      <p class="ln"><b>Outras observações importantes:</b> ${blank}<br>${blank}<br>${blank}</p>
      <div class="sig"><div>______________________________<br>Responsável</div><div>______________________________<br>Neuropsicopedagogo(a)</div></div>
      </body></html>`;
    const w = window.open("", "_blank"); if (!w) { alert("Permita pop-ups para imprimir a ficha."); return; }
    w.document.write(html); w.document.close(); w.focus(); setTimeout(() => { try { w.print(); } catch (e) { /* */ } }, 300);
  }

  /* ---------------- Componente principal ---------------- */
  function AnamneseForm({ onBack, onOpenPatient }) {
    const [stage, setStage] = useState("menu"); // menu | form
    const [pid, setPid] = useState("");
    const [date, setDate] = useState(window.todayISO());
    const [f, setF] = useState({});
    const [sessions, setSessions] = useState([{ data: "", tema: "" }]);
    const [destino, setDestino] = useState("");
    const [destinoDet, setDestinoDet] = useState("");
    const [melhoras, setMelhoras] = useState("");
    const [outrasObs, setOutrasObs] = useState("");
    const [saved, setSaved] = useState(false);
    const [err, setErr] = useState("");

    const patient = (window.PATIENTS || []).find((p) => p.id === pid);
    const setVal = (k, v) => setF((s) => ({ ...s, [k]: v }));

    function pickPatient(id) {
      setPid(id);
      const p = (window.PATIENTS || []).find((x) => x.id === id);
      if (!p) return;
      setF((s) => {
        const u = { ...s };
        if (!nonEmpty(u.nome)) u.nome = p.name;
        if (!nonEmpty(u.idade) && p.age != null) u.idade = String(p.age);
        if (!nonEmpty(u.escolaridade) && p.grade) u.escolaridade = p.grade;
        const ass = (window.ASSESSMENTS && window.ASSESSMENTS[id]) || [];
        if (!nonEmpty(u.testes) && ass.length) u.testes = ass.map((a) => `${a.name} (${a.date})${a.result ? " — " + a.result : ""}`).join("; ");
        return u;
      });
    }

    function buildDisplay() {
      const out = SECTIONS.map((sec) => ({ title: sec.title, items: sec.fields.filter((fl) => nonEmpty(f[fl.k])).map((fl) => ({ label: fl.label, value: f[fl.k] })) })).filter((sec) => sec.items.length);
      return out;
    }

    function save() {
      if (!pid) { setErr("Selecione o paciente."); return; }
      setErr("");
      const display = buildDisplay();
      const sess = sessions.filter((s) => s.data || s.tema);
      const sheet = { kind: "anamnese", display, sessions: sess, destino, destinoDet, melhoras, outrasObs };
      const note = `Queixa principal: ${f.queixa || "—"}. Sintomas: ${f.sintomas || "—"}.`;
      window.addAvaliacao({ pid, name: "Anamnese Completa do Adulto", date, result: "Anamnese registrada", note, sheet });
      setSaved(true);
    }

    function exportPDF() {
      const blank = "______________________________________________________________";
      // Ficha completa: todos os campos, com o valor preenchido ou linha em branco.
      const secHtml = SECTIONS.map((sec) => `<h2>${esc(sec.title)}</h2>` + sec.fields.map((fl) => {
        const v = f[fl.k];
        return `<p class="ln"><b>${esc(fl.label)}:</b> ${nonEmpty(v) ? esc(v) : blank}</p>`;
      }).join("")).join("");
      const sess = sessions.filter((s) => s.data || s.tema);
      const sessHtml = `<h2>Registro de atendimentos</h2>${sess.length ? sess.map((s) => `<p class="ln"><b>Data:</b> ${esc(s.data) || "___/___/____"} &nbsp; <b>Tema:</b> ${esc(s.tema) || blank}</p>`).join("") : `<p class="ln"><b>Data:</b> ___/___/____ &nbsp; <b>Tema:</b> ${blank}</p>`}`;
      const destHtml = `<h2>Destino do caso</h2><p class="ln"><b>${esc(destino) || "—"}</b> ${esc(destinoDet)}</p><p class="ln"><b>Melhoras obtidas:</b> ${nonEmpty(melhoras) ? esc(melhoras) : blank}</p><p class="ln"><b>Outras observações:</b> ${nonEmpty(outrasObs) ? esc(outrasObs) : blank}</p>`;
      const html = `<!DOCTYPE html><html lang="pt-BR"><head><meta charset="UTF-8"><title>Anamnese — ${esc(patient ? patient.name : "")}</title>
        <style>body{font-family:Arial,Helvetica,sans-serif;color:#142826;padding:24px;font-size:12px;line-height:1.55}h1{font-size:15px;text-align:center;margin:0 0 6px}h2{font-size:12.5px;background:#E9F0EE;padding:5px 8px;border-radius:5px;margin:16px 0 6px}.meta{margin:8px 0}.ln{margin:4px 0}.sig{margin-top:40px;text-align:center}.sig div{margin-top:34px}</style></head><body>
        <h1>ANAMNESE COMPLETA DO ADULTO</h1>
        <div class="meta"><b>Paciente:</b> ${esc(patient ? patient.name : f.nome || "—")} &nbsp; <b>Data:</b> ${esc(date)}</div>
        ${secHtml}${sessHtml}${destHtml}
        <div class="sig"><div>______________________________<br>Responsável</div><div>______________________________<br>Neuropsicopedagogo(a)</div></div>
        </body></html>`;
      const w = window.open("", "_blank"); if (!w) { alert("Permita pop-ups para exportar o PDF."); return; }
      w.document.write(html); w.document.close(); w.focus(); setTimeout(() => { try { w.print(); } catch (e) { /* */ } }, 300);
    }

    const Field = (fl) => (
      fl.t === "area"
        ? <div className="fld" key={fl.k}><label>{fl.label}</label><textarea className="ctrl" value={f[fl.k] || ""} onChange={(e) => setVal(fl.k, e.target.value)}></textarea></div>
        : fl.k === "sexo"
          ? <div className="fld" key={fl.k}><label>{fl.label}</label><select className="ctrl" value={f.sexo || ""} onChange={(e) => setVal("sexo", e.target.value)}><option value="">Selecione...</option>{SEXOS.map((x) => <option key={x}>{x}</option>)}</select></div>
          : <div className="fld" key={fl.k}><label>{fl.label}</label><input className="ctrl" value={f[fl.k] || ""} onChange={(e) => setVal(fl.k, e.target.value)} /></div>
    );

    return (
      <div className="form-wrap">
        <div className="hay-top">
          <button className="pt-back" onClick={onBack}><Icon name="chevL" size={16} /> Voltar para avaliações</button>
        </div>
        <div className="page-head" style={{ marginBottom: 14 }}>
          <div><h1><Icon name="folderHeart" size={25} /> Anamnese Completa do Adulto</h1><p className="sub">Ficha clínica estruturada — identificação, diagnóstico, histórico e acompanhamento.</p></div>
        </div>

        {stage === "menu" && (
          <div className="form-card">
            <div className="asrs-menu">
              <button className="cta-secondary" onClick={() => setStage("form")}><span className="ci"><Icon name="clipboardCheck" size={22} /></span><span className="ct"><b>Preencher agora</b><span>Registrar a anamnese no sistema</span></span></button>
              <button className="cta-secondary" onClick={printBlank}><span className="ci"><Icon name="download" size={22} /></span><span className="ct"><b>Imprimir ficha em branco</b><span>Gera o PDF para preencher no papel</span></span></button>
            </div>
          </div>
        )}

        {stage === "form" && (
          <>
            <div className="form-card">
              <div className="sec-head"><span className="si"><Icon name="users" size={18} /></span> Paciente</div>
              <div className="fld"><label>Paciente <span className="req">*</span></label><window.PatientPicker value={pid} onChange={pickPatient} /></div>
              <div className="fld" style={{ marginBottom: 0 }}><label>Data</label><input className="ctrl" type="date" value={date} onChange={(e) => setDate(e.target.value)} /></div>
            </div>

            {SECTIONS.map((sec) => (
              <div className="form-card" key={sec.title}>
                <div className="sec-head">{sec.title}</div>
                {sec.fields.map(Field)}
              </div>
            ))}

            <div className="form-card">
              <div className="sec-head">Registro de atendimentos</div>
              {sessions.map((s, i) => (
                <div className="anam-sess" key={i}>
                  <input className="ctrl" type="date" value={s.data} onChange={(e) => setSessions(sessions.map((x, idx) => (idx === i ? { ...x, data: e.target.value } : x)))} />
                  <input className="ctrl" placeholder="Tema" value={s.tema} onChange={(e) => setSessions(sessions.map((x, idx) => (idx === i ? { ...x, tema: e.target.value } : x)))} />
                  <button className="icon-btn-plain" onClick={() => setSessions(sessions.filter((_, idx) => idx !== i))} aria-label="Remover"><Icon name="x" size={16} /></button>
                </div>
              ))}
              <button className="btn btn-ghost btn-xs" style={{ marginTop: 8 }} onClick={() => setSessions([...sessions, { data: "", tema: "" }])}><Icon name="plus" size={14} /> Adicionar atendimento</button>
            </div>

            <div className="form-card">
              <div className="sec-head">Destino do caso</div>
              <div className="fld"><label>Destino</label><select className="ctrl" value={destino} onChange={(e) => setDestino(e.target.value)}><option value="">Selecione...</option>{DESTINOS.map((d) => <option key={d}>{d}</option>)}</select></div>
              <div className="fld"><label>Detalhe (qual / quem / motivo / por quê)</label><input className="ctrl" value={destinoDet} onChange={(e) => setDestinoDet(e.target.value)} /></div>
              <div className="fld"><label>Melhoras obtidas</label><textarea className="ctrl" value={melhoras} onChange={(e) => setMelhoras(e.target.value)}></textarea></div>
              <div className="fld" style={{ marginBottom: 0 }}><label>Outras observações importantes</label><textarea className="ctrl" value={outrasObs} onChange={(e) => setOutrasObs(e.target.value)}></textarea></div>
            </div>

            {err && <p className="form-err" style={{ display: "flex", alignItems: "center", gap: 7, color: "#EF4444", fontWeight: 700, fontSize: 13.5 }}><Icon name="x" size={15} /> {err}</p>}
            {saved && <div className="save-ok"><span className="so-ic"><Icon name="clipboardCheck" size={18} stroke={2.6} /></span><div><b>Anamnese salva!</b><span>Vinculada ao prontuário{patient ? " de " + patient.name : ""}.</span></div></div>}

            <div className="asrs-actions">
              {!saved
                ? <button className="btn btn-primary" onClick={save}><Icon name="clipboardCheck" size={18} /> Salvar no prontuário</button>
                : <button className="btn btn-primary" onClick={() => onOpenPatient && pid && onOpenPatient(pid)}><Icon name="users" size={18} /> Ver no prontuário</button>}
              <button className="btn btn-ghost" onClick={exportPDF}><Icon name="download" size={18} /> Exportar PDF</button>
              <button className="btn btn-ghost" onClick={printBlank}><Icon name="download" size={18} /> Imprimir ficha em branco</button>
            </div>
          </>
        )}
      </div>
    );
  }

  window.AnamneseForm = AnamneseForm;
})();
