// Helm — 文件金庫(魔法版)。丟檔案進來 → 存進 Drive 的「Helm 文件」夾 → AI 自動讀出欄位建檔 → 使用者確認/微調。
//   保險類(有保額)之後會自動進保障體檢。AI 財務教練讀得到。教材型、非投資建議。
(function () {
  const NS = window.HelmDesignSystem_9613a7;
  const { Field, Input, Button } = NS;
  function money(n) { var v = Number(String(n == null ? "" : n).replace(/,/g, "")) || 0; return v ? v.toLocaleString("en-US") : ""; }

  function DocsScreen({ onClose, onChanged }) {
    const docs = (window.HELM && window.HELM.docs) || [];
    const [form, setForm] = React.useState(null);
    const [busy, setBusy] = React.useState(false);
    const [uploading, setUploading] = React.useState(false);

    function up(k) { return function (e) { setForm(Object.assign({}, form, { [k]: e.target.value })); }; }
    function openNew() { setForm({ name: "", type: "", amount: "", premium: "", due: "", policyNo: "", url: "", note: "" }); }
    function openEdit(d) { setForm({ _row: d._row, name: d.name || "", type: d.type || "", amount: d.amount == null ? "" : String(d.amount), premium: d.premium == null ? "" : String(d.premium), due: String(d.due || "").replace(/\//g, "-"), policyNo: d.policyNo || "", url: d.url || "", note: d.note || "", _ai: !!d._ai }); }

    function onPick(e) {
      const file = e.target.files && e.target.files[0];
      e.target.value = "";   // 清掉 → 同一檔可再選
      if (!file) return;
      if (file.size > 12 * 1024 * 1024) { if (onChanged) onChanged("檔案太大(超過 12MB),請壓縮或改拍截圖"); return; }
      setUploading(true);
      const reader = new FileReader();
      reader.onload = function () {
        window.HelmData.uploadDoc({ fileData: reader.result, fileName: file.name, mimeType: file.type }).then(function (res) {
          setUploading(false);
          if (res && res.ok) {
            const ex = (res.data && res.data.extracted) || {};
            const row = res.data && res.data._row;
            const d = ((window.HELM && window.HELM.docs) || []).filter(function (x) { return x._row === row; })[0];
            if (d) { d._ai = true; openEdit(d); }   // 打開讓使用者確認 AI 抽出來的欄位
            const bits = [ex.type, ex.amount ? "保額 " + money(ex.amount) : "", ex.due ? "到期 " + ex.due : ""].filter(Boolean).join(" · ");
            if (onChanged) onChanged(bits ? "AI 已讀取並建檔:" + bits : "已上傳,AI 沒抓到欄位,請手動補");
          } else if (res && res.error === "drive") {
            if (onChanged) onChanged("還沒授權 Drive — 請先在編輯器執行 authorizeDrive()");
          } else {
            if (onChanged) onChanged("上傳失敗:" + ((res && res.error) || "請重試"));
          }
        });
      };
      reader.onerror = function () { setUploading(false); if (onChanged) onChanged("讀檔失敗,請重試"); };
      reader.readAsDataURL(file);
    }

    function save() {
      if (!String(form.name).trim()) return;
      setBusy(true);
      const p = { name: form.name, type: form.type, amount: form.amount, premium: form.premium, due: form.due, policyNo: form.policyNo, url: form.url, note: form.note };
      const op = form._row ? window.HelmData.updateDoc(Object.assign({ _row: form._row }, p)) : window.HelmData.addDoc(p);
      op.then(function () { setBusy(false); setForm(null); if (onChanged) onChanged("文件已儲存"); });
    }
    function del() { setBusy(true); window.HelmData.deleteDoc(form._row).then(function () { setBusy(false); setForm(null); if (onChanged) onChanged("文件已刪除"); }); }

    return (
      <div className="fpage" role="dialog" aria-modal="true" aria-label="文件金庫">
        <div className="fpage__panel">
          <header className="fpage__bar">
            <button className="fpage__cancel" onClick={onClose}><i className="ph ph-arrow-left" aria-hidden="true" />返回</button>
            <span className="fpage__title">文件金庫</span>
            <span aria-hidden="true" />
          </header>
          <div className="fpage__scroll">
            <div className="fpage__body">

              {!form && (
                <section className="fpage__card">
                  <p className="prot-sum__note">丟一份保單或繳費單進來——檔案存進你 Google Drive 的「Helm 文件」夾,<b>AI 自動讀出保額、到期、保單號幫你建檔</b>,你確認一下就好。AI 財務教練也看得到。</p>
                  <label className={"doc-drop" + (uploading ? " doc-drop--busy" : "")}>
                    <input type="file" accept="application/pdf,image/jpeg,image/png,image/gif,image/webp" onChange={onPick} disabled={uploading} hidden />
                    {uploading
                      ? <><span className="doc-drop__spin" aria-hidden="true" /><span className="doc-drop__t">AI 讀取中…(約 10 秒)</span></>
                      : <><i className="ph ph-upload-simple" aria-hidden="true" /><span className="doc-drop__t">丟檔案進來 · AI 自動建檔</span><span className="doc-drop__s">PDF 或照片(JPG / PNG)</span></>}
                  </label>
                  <button type="button" className="doc-manual" onClick={openNew} disabled={uploading}>或手動新增一筆(不上傳檔案)</button>
                </section>
              )}

              {form && (
                <section className="fpage__card">
                  <div className="fpage__card-head"><span className="t-overline">{form._ai ? "確認 AI 讀到的內容" : (form._row ? "編輯文件" : "手動新增")}</span></div>
                  {form._ai && <p className="doc-verify"><i className="ph ph-sparkle" aria-hidden="true" /> AI 幫你填好了,看一下對不對、可以直接改。</p>}
                  <div className="fpage__fields">
                    <Field label="名稱"><Input placeholder="例:第一金房貸壽險" value={form.name} onChange={up("name")} /></Field>
                    <Field label="類型" hint="壽險 / 醫療 / 意外 / 車險 / 火險 / 儲蓄 / 繳費單…"><Input placeholder="例:壽險" value={form.type} onChange={up("type")} /></Field>
                    <Field label="保額 / 金額" hint="選填"><Input amount inputMode="numeric" affix="NT$" placeholder="例:7250000" value={form.amount} onChange={up("amount")} /></Field>
                    <Field label="保費" hint="選填,年繳/半年繳金額"><Input amount inputMode="numeric" affix="NT$" placeholder="例:24000" value={form.premium} onChange={up("premium")} /></Field>
                    <Field label="到期 / 續約日" hint="選填"><Input type="date" value={form.due} onChange={up("due")} /></Field>
                    <Field label="保單號 / 編號" hint="選填"><Input value={form.policyNo} onChange={up("policyNo")} /></Field>
                    <Field label="檔案連結" hint="上傳的檔案會自動帶入;也可自己貼雲端連結"><Input inputMode="url" placeholder="https://…" value={form.url} onChange={up("url")} /></Field>
                    <Field label="備註" hint="選填"><Input value={form.note} onChange={up("note")} /></Field>
                  </div>
                  <div className="ct-edit__btns" style={{ marginTop: 10 }}>
                    {form._row && <Button variant="danger" onClick={del} loading={busy}>刪除</Button>}
                    <Button variant="secondary" onClick={function () { setForm(null); }} disabled={busy}>取消</Button>
                    <Button variant="primary" onClick={save} loading={busy} disabled={!String(form.name).trim()}>儲存</Button>
                  </div>
                </section>
              )}

              {!form && docs.length > 0 && (
                <section className="fpage__card">
                  <div className="doc-list">
                    {docs.map(function (d) {
                      const sub = [d.amount ? "保額 " + money(d.amount) : "", d.due ? "到期 " + d.due : "", d.policyNo ? "#" + d.policyNo : ""].filter(Boolean).join(" · ");
                      return (
                        <div key={d.id} className="doc-row">
                          <button type="button" className="doc-row__main" onClick={function () { openEdit(d); }}>
                            <span className="doc-row__l">
                              <span className="doc-row__name">{d.name}{d.type ? <span className="doc-row__type">{d.type}</span> : null}</span>
                              <span className="doc-row__sub">{sub || "點我補資料"}</span>
                            </span>
                            <i className="ph ph-pencil-simple doc-row__edit" aria-hidden="true" />
                          </button>
                          {d.url ? <a className="doc-row__open" href={d.url} target="_blank" rel="noopener noreferrer" aria-label="開啟檔案"><i className="ph ph-arrow-square-out" aria-hidden="true" /></a> : null}
                        </div>
                      );
                    })}
                  </div>
                </section>
              )}

              {!form && docs.length === 0 && !uploading && (
                <section className="fpage__card"><div className="wt-empty"><i className="ph ph-folder-open" aria-hidden="true" /><p>還沒有文件。</p><span>把保單、繳費單丟上來,集中管理、不再翻找。</span></div></section>
              )}
            </div>
          </div>
        </div>
      </div>
    );
  }

  window.DocsScreen = DocsScreen;
})();
