/* global React, API, Bubble, DocFrame, EmptyDoc, Msg, AiProg, Btn, now */
// Сценарий 1 — Массовое создание документов по ЛЮБОМУ шаблону.
// Выбор шаблона → Claude по полям предлагает, какие документы приложить → OCR раскладывает
// данные по полям → удобная форма с подсказками Дадаты (компании/ИНН/адрес) → создание.
// Без DataDoc-ключа работает на демо-шаблонах (документ собирает Claude).

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

// поле шаблона: {id, name, required, type, values?}
const tf = (id, name, o = {}) => ({ id, name, required: !!o.req, type: o.type || 'string', values: o.values });
const side = (tattrs) => ({ sides: [{ tattrFolders: [{ tattrs }] }] });

// демо-шаблоны (фолбэк, если DataDoc-ключ не подключён) — разные наборы полей → разные подсказки документов
const DEMO_TEMPLATES = [
  {
    id: 'demo-trud', name: 'Трудовой договор', demo: true, folders: ['Демо'],
    sides: side([
      // «вопросы» (list) — отвечаем один раз, общие для всех
      tf('q_prob', 'Работнику устанавливается срок испытания?', { type: 'list', values: ['Да', 'Нет'] }),
      tf('q_fixed', 'Заключается ли срочный трудовой договор?', { type: 'list', values: ['Да', 'Нет'] }),
      tf('q_emp', 'Тип занятости Работника?', { type: 'list', values: ['Основная работа', 'Совместительство'] }),
      tf('q_place', 'Место работы Работника?', { type: 'list', values: ['На стационарном рабочем месте', 'Дистанционная работа', 'Разъездной характер работы'] }),
      tf('q_cond', 'Условия труда Работника?', { type: 'list', values: ['Нормальные условия труда (специальная оценка условий труда не проводилась)', 'Допустимые условия труда (2 класс)', 'Вредные условия труда (3 класс)'] }),
      tf('q_pay', 'Какой вид заработной платы установлен Работнику?', { type: 'list', values: ['Повременная – оклад', 'Сдельная', 'Повременно-премиальная'] }),
      tf('q_climate', 'Работник работает в местности с особыми природно-климатическими условиями?', { type: 'list', values: ['Да', 'Нет'] }),
      // данные работника — из таблицы (по строке на сотрудника)
      tf('num', 'Номер трудового договора', { req: true }),
      tf('ddate', 'Дата трудового договора', { req: true, type: 'date' }),
      tf('fam', 'Фамилия работника', { req: true }),
      tf('im', 'Имя работника', { req: true }),
      tf('otch', 'Отчество работника'),
      tf('birth', 'Дата рождения', { type: 'date' }),
      tf('position', 'Должность', { req: true }),
      tf('dep', 'Структурное подразделение'),
      tf('pser', 'Серия', { maxLength: 4, mask: '9999' }),        // строгая маска — 4 цифры
      tf('pnum', 'Номер', { maxLength: 6, mask: '999999' }),      // 6 цифр
      tf('pcode', 'Код подразделения', { mask: '999-999' }),
      tf('pissued', 'Кем выдан паспорт'),
      tf('pdate', 'Дата выдачи паспорта', { type: 'date' }),
      tf('paddr', 'Адрес регистрации'),
      tf('snils', 'СНИЛС'),
      tf('innw', 'ИНН работника'),
      tf('salary', 'Оклад, ₽', { req: true, type: 'money' }),
      tf('start', 'Дата начала работы', { req: true, type: 'date' }),
      // общие поля (одинаковы для всех) — их НЕ добавляют в таблицу, спрашиваем один раз
      tf('org', 'Наименование организации или ИП', { req: true }),
      tf('orginn', 'ИНН организации', { req: true }),
      tf('orgaddr', 'Юридический адрес', { req: true }),
      tf('orgcity', 'Город'),
      tf('dir_f', 'Фамилия генерального директора', { req: true }),
      tf('dir_i', 'Имя генерального директора', { req: true }),
      tf('dir_o', 'Отчество генерального директора'),
      tf('workhours', 'Продолжительность рабочего времени (час. в нед.)', { req: true }),
      tf('timestart', 'Время начала работы'),
      tf('timeend', 'Время окончания работы'),
    ]),
  },
  {
    id: 'demo-usl', name: 'Договор оказания услуг (ГПХ)', demo: true, folders: ['Демо'],
    sides: side([
      tf('org', 'Наименование заказчика', { req: true }), tf('inn', 'ИНН заказчика', { req: true }), tf('kpp', 'КПП заказчика'),
      tf('addr', 'Юридический адрес заказчика'), tf('dir', 'Генеральный директор заказчика'),
      tf('exec', 'Исполнитель (ФИО)', { req: true }), tf('pass', 'Паспорт исполнителя'), tf('execinn', 'ИНН исполнителя'),
      tf('subj', 'Предмет услуг', { req: true }), tf('sum', 'Сумма, ₽', { req: true, type: 'money' }), tf('date', 'Дата договора', { type: 'date' }),
    ]),
  },
  {
    id: 'demo-post', name: 'Договор поставки', demo: true, folders: ['Демо'],
    sides: side([
      tf('sup', 'Наименование поставщика', { req: true }), tf('supinn', 'ИНН поставщика', { req: true }), tf('supaddr', 'Адрес поставщика'),
      tf('buy', 'Наименование покупателя', { req: true }), tf('buyinn', 'ИНН покупателя', { req: true }), tf('buyaddr', 'Адрес покупателя'),
      tf('goods', 'Наименование товара', { req: true }), tf('sum', 'Сумма поставки, ₽', { req: true, type: 'money' }), tf('date', 'Дата', { type: 'date' }),
    ]),
  },
  {
    id: 'demo-dov', name: 'Доверенность на получение ТМЦ', demo: true, folders: ['Демо'],
    sides: side([
      tf('org', 'Наименование доверителя', { req: true }), tf('inn', 'ИНН доверителя', { req: true }), tf('addr', 'Адрес доверителя'), tf('dir', 'Руководитель доверителя'),
      tf('rep', 'Представитель (ФИО)', { req: true }), tf('pass', 'Паспорт представителя', { req: true }),
      tf('power', 'Полномочия', { req: true }), tf('term', 'Срок действия', { type: 'date' }),
    ]),
  },
];

window.SCENARIOS.mass = async function (ctx, { text }) {
  ctx.setHead('Массовое создание документов', 'любой шаблон · данные из сканов и Дадаты');
  ctx.setDoc(<DocFrame title="шаблон" sub="выбор шаблона"><EmptyDoc lines={['🗂', 'выберите шаблон —\nпредложу, какие документы приложить']} /></DocFrame>);
  const k = ctx.node(<Msg who="ai" ts={now()}><AiProg icon="🗂" label="загружаю шаблоны аккаунта" count="DataDoc" /></Msg>);
  let templates = [];
  try {
    const tree = await API.datadoc('GET', '/folders/allcontent');
    (window.collectTemplateTree || (() => { }))(Array.isArray(tree) ? tree : (tree ? [tree] : []), [], templates);
  } catch (e) { /* нет ключа — уйдём на демо */ }
  ctx.remove(k);

  let demo = false;
  if (!templates.length) { templates = DEMO_TEMPLATES; demo = true; }

  const Picker = window.TemplatePicker;
  const hint = (text.match(/(?:договор|доверенн|счёт|счет|акт|соглашени|шаблон[у]?)\s+([а-яa-zё-]{3,})/i) || [])[1] || '';
  ctx.aiNode(
    <>
      <Bubble>
        Массовое создание по <b>любому шаблону</b> — трудовые договоры, ГПХ, доверенности. Выберите шаблон: общие «вопросы» шаблона ответите один раз, а данные людей загрузите <b>таблицей</b> — я создам <b>по договору на каждую строку</b> и подпишу пачкой УКЭП.
        {demo ? <div style={{ fontSize: 11, color: 'var(--ink-3)', marginTop: 8 }}>DataDoc-ключ не подключён — показываю на демо-шаблонах.</div> : null}
      </Bubble>
      {Picker
        ? <Picker templates={templates} presetFilter={hint} onPick={(t) => { ctx.you('Массово: ' + t.name); (window.SCENARIOS.batchTemplate || window.SCENARIOS.fillTemplate)(ctx, t, { mass: true }); }} />
        : <Bubble><span style={{ color: '#c33' }}>Модуль шаблонов не загрузился — обновите страницу.</span></Bubble>}
    </>
  );
};
