/* global React, API, Bubble, DocFrame, EmptyDoc, Msg, AiProg, Btn, now */
// Сценарий 7 — Акт к существующему договору (реальный DataDoc /renders + Claude).
// Визуал s7. Находим договор → берём стороны/предмет/сумму → собираем акт → Word.

window.SCENARIOS = window.SCENARIOS || {};

const AKT_SYSTEM = `Ты — юрист DataDoc. На основе данных договора-основания составь АКТ сдачи-приёмки (выполненных работ / оказанных услуг). Возьми из договора стороны (Заказчик/Исполнитель), предмет и сумму. Верни СТРОГО JSON: {"title":"Акт № __ к договору …","text":"полный текст акта с разделами","period":"период, если указан"}. Деловой юридический русский. Недостающее оставь как «____». Без markdown вне JSON.`;

function DraftAkt({ ctx, base }) {
  const [state, setState] = React.useState('idle');
  const build = async () => {
    setState('busy');
    const k = ctx.node(<Msg who="ai" ts={now()}><AiProg icon="📄" label="собираю акт из данных договора" count="Claude" /></Msg>);
    try {
      const d = (await API.claudeJSON(AKT_SYSTEM, [{ type: 'text', text: 'Данные договора-основания (JSON):\n' + JSON.stringify(base) }], { max_tokens: 2500 })).data;
      ctx.remove(k);
      if (!d || !d.text) { ctx.ai('Не удалось собрать акт — не хватает данных договора.'); setState('idle'); return; }
      const blob = window.makeWordBlob(d.title || 'Акт', '<h1>' + (d.title || 'Акт') + '</h1>' + window.mdToHtml(d.text));
      const url = URL.createObjectURL(blob);
      const fname = (d.title || 'Акт').replace(/[\\/:*?"<>|]/g, ' ').slice(0, 80) + '.doc';
      ctx.setDoc(
        <DocFrame title={d.title || 'Акт'} sub="черновик · редактируемый">
          <EditableDoc title={d.title || 'Акт'} text={d.text} fileName={d.title || 'Акт'} />
        </DocFrame>
      );
      setState('done');
      ctx.aiNode(<><Bubble>Собрала <b>{d.title || 'акт'}</b> из данных договора{d.period ? ' за ' + d.period : ''} — превью справа.</Bubble>
        <div className="acta"><a className="btn-aip primary" href={url} download={fname}>Скачать Word (.doc) →</a>
          <Btn kind="dashed" onClick={() => ctx.aiNode(<EmailCompose ctx={ctx} fileName={fname} subject={d.title || 'Акт'} />)}>Отправить на email</Btn>
          <div className="btn-aip dashed" onClick={() => { ctx.you('Подписать и отправить'); ctx.ai('Отправила бы на подписание УКЭП (демо). В DataDoc акт привязывается к договору-основанию.'); }}>Подписать и отправить</div></div></>);
    } catch (e) { ctx.remove(k); ctx.aiNode(<Bubble><span style={{ color: '#c33' }}>Ошибка: {e.message}</span></Bubble>); setState('idle'); }
  };
  if (state === 'done') return null;
  return <div className="acta"><Btn kind="primary" onClick={state === 'busy' ? undefined : build}>{state === 'busy' ? 'Собираю…' : 'Собрать акт по этому договору →'}</Btn></div>;
}

function AktPicker({ ctx, list }) {
  const pick = async (r) => {
    ctx.you('Акт к: ' + (r.name || 'договор'));
    const k = ctx.node(<Msg who="ai" ts={now()}><AiProg icon="📄" label="читаю договор-основание" count="DataDoc" /></Msg>);
    let full = r;
    try { full = await API.datadoc('GET', '/renders/' + encodeURIComponent(r.id)); } catch (e) { /* оставим краткие данные */ }
    ctx.remove(k);
    ctx.setDoc(
      <DocFrame title={full.name || 'договор'} sub="договор-основание">
        <div className="docp" style={{ fontFamily: 'inherit', fontSize: 12 }}><div className="bdg">основание</div><h1 style={{ fontSize: 16 }}>{full.name}</h1>
          {full.template && full.template.name ? <div className="cprow"><span className="k">шаблон</span><span className="v">{full.template.name}</span></div> : null}
          {full.createdAt ? <div className="cprow"><span className="k">создан</span><span className="v">{new Date(full.createdAt).toLocaleDateString('ru-RU')}</span></div> : null}
        </div>
      </DocFrame>
    );
    ctx.aiNode(<><Bubble>Взяла договор <b>«{full.name}»</b> как основание. Соберу акт по его сторонам, предмету и сумме.</Bubble><DraftAkt ctx={ctx} base={full} /></>);
  };
  return (
    <div className="cpcard" style={{ maxWidth: 460 }}>
      <div className="h"><div className="nm">Выберите договор-основание</div><div className="ok">{list.length}</div></div>
      <div style={{ maxHeight: 260, overflowY: 'auto', display: 'flex', flexDirection: 'column', gap: 4 }}>
        {list.slice(0, 20).map((r) => (
          <div key={r.id} className="btn-aip" style={{ textAlign: 'left', padding: '8px 12px' }} onClick={() => pick(r)}>
            § {r.name}{r.createdAt ? <span style={{ color: 'var(--ink-3)', fontSize: 11, marginLeft: 6 }}>· {new Date(r.createdAt).toLocaleDateString('ru-RU')}</span> : null}
          </div>
        ))}
      </div>
    </div>
  );
}

window.SCENARIOS.akt = async function (ctx, { text }) {
  ctx.setHead('Акт к договору', 'данные из договора');
  ctx.setDoc(<DocFrame title="договор-основание" sub="выберите договор"><EmptyDoc lines={['📄', 'укажите договор —\nсоберу акт по его данным']} /></DocFrame>);
  const q = (text || '').replace(/сдела[а-я]*|состав[а-я]*|акт[а-я]*|к договору|по договору|закрыть месяц/gi, '').trim();
  const k = ctx.node(<Msg who="ai" ts={now()}><AiProg icon="📄" label="ищу договоры" count="DataDoc" /></Msg>);
  let data;
  try { data = await API.datadoc('GET', '/renders?to=40' + (q ? '&filter=' + encodeURIComponent(q) : '')); }
  catch (e) {
    ctx.remove(k);
    ctx.aiNode(<Bubble><span style={{ color: '#c33' }}>Не удалось загрузить договоры: {e.message}</span>{e.status === 401 ? <div style={{ fontSize: 11, color: 'var(--ink-3)', marginTop: 4 }}>Подключите DataDoc-ключ на экране входа.</div> : null}</Bubble>);
    return;
  }
  ctx.remove(k);
  const list = (data && data.renders) || (Array.isArray(data) ? data : []);
  if (!list.length) { ctx.aiNode(<Bubble>Не нашла договоров{q ? ' по «' + q + '»' : ''}. Уточните название или контрагента.</Bubble>); return; }
  ctx.aiNode(<><Bubble>Сделаю акт выполненных работ. Выберите договор-основание — подставлю стороны, предмет и сумму:</Bubble><AktPicker ctx={ctx} list={list} /></>);
};
