// edrpou-data.jsx — автопідтягування контрагента за кодом ЄДРПОУ + робочий стан
// замовників і договорів (додані вручну зберігаються у localStorage).
// lookupEdrpou() — мок реєстру (Opendatabot/ДПС/Дія). На бекенді замінюється
// реальним запитом; сигнатура (Promise з тими ж полями) лишається.

// ——— Мок державного реєстру ЄДР ———
// Ключ — код ЄДРПОУ (юр. особи 8 цифр, ФОП — РНОКПП 10 цифр).
const EDR_REGISTRY = {
  // вже наявні замовники (щоб підтягування знаходило їх)
  "41835672": { name: "Товариство з обмеженою відповідальністю «Подільський Девелопмент»", short: "ТОВ «Подільський Девелопмент»", type: "legal", address: "04070, м. Київ, вул. Хорива, 12, оф. 305", director: "Гриценко Олександр Володимирович", directorRole: "Директор", kved: "41.10", kvedText: "Організація будівництва будівель", status: "active", vatPayer: true, registeredDate: "2016-08-19" },
  "02147853": { name: "Управління освіти виконавчого органу Київської міської ради", short: "Управління освіти м. Києва", type: "state", address: "01001, м. Київ, вул. Богдана Хмельницького, 32", director: "Фіданян Олена Володимирівна", directorRole: "Начальник управління", kved: "84.11", kvedText: "Державне управління загального характеру", status: "active", vatPayer: false, registeredDate: "2002-03-14" },
  "39184562": { name: "Приватне підприємство «Лісове»", short: "ПП «Лісове»", type: "legal", address: "08120, Київська обл., с. Лісники, вул. Соснова, 1", director: "Петрук Ігор Степанович", directorRole: "Директор", kved: "68.10", kvedText: "Купівля та продаж власного нерухомого майна", status: "active", vatPayer: true, registeredDate: "2014-05-22" },
  "00015622": { name: "Міністерство юстиції України", short: "Мін'юст", type: "state", address: "01001, м. Київ, вул. Архітектора Городецького, 13", director: "Малюська Денис Леонтійович", directorRole: "Міністр", kved: "84.11", kvedText: "Державне управління загального характеру", status: "active", vatPayer: false, registeredDate: "1998-01-12" },
  // нові контрагенти — для демонстрації «введи код → підтягнулося»
  "43217890": { name: "Товариство з обмеженою відповідальністю «Аркадія Резиденс»", short: "ТОВ «Аркадія Резиденс»", type: "legal", address: "65009, м. Одеса, Фонтанська дорога, 16", director: "Захаров Дмитро Сергійович", directorRole: "Директор", kved: "41.10", kvedText: "Організація будівництва будівель", status: "active", vatPayer: true, registeredDate: "2019-11-04" },
  "38217604": { name: "Товариство з обмеженою відповідальністю «Бізнес-Центр Хорива»", short: "ТОВ «БЦ Хорива»", type: "legal", address: "04071, м. Київ, вул. Хорива, 12", director: "Литвин Олег Павлович", directorRole: "Директор", kved: "68.20", kvedText: "Надання в оренду нерухомого майна", status: "active", vatPayer: true, registeredDate: "2012-02-28" },
  "04056789": { name: "Одеська міська рада", short: "Одеська міськрада", type: "state", address: "65026, м. Одеса, Думська площа, 1", director: "—", directorRole: "Міський голова", kved: "84.11", kvedText: "Державне управління загального характеру", status: "active", vatPayer: false, registeredDate: "2000-06-15" },
  "42889106": { name: "Товариство з обмеженою відповідальністю «Чорноморбуд-Інвест»", short: "ТОВ «Чорноморбуд-Інвест»", type: "legal", address: "68003, Одеська обл., м. Чорноморськ, вул. Праці, 7", director: "Ковальова Ірина Миколаївна", directorRole: "Директор", kved: "41.20", kvedText: "Будівництво житлових і нежитлових будівель", status: "active", vatPayer: true, registeredDate: "2018-09-30" },
  "37652104": { name: "Товариство з обмеженою відповідальністю «Преміум Девелопмент»", short: "ТОВ «Преміум Девелопмент»", type: "legal", address: "65114, м. Одеса, вул. Генуезька, 24", director: "Соколов Артем Ігорович", directorRole: "Директор", kved: "41.10", kvedText: "Організація будівництва будівель", status: "terminated", vatPayer: false, registeredDate: "2011-04-18" },
};

// Затримка + результат запиту до реєстру (мок). Повертає Promise.
window.lookupEdrpou = function (codeRaw) {
  const code = String(codeRaw || "").replace(/\D/g, "");
  return new Promise((resolve) => {
    setTimeout(() => {
      if (code.length !== 8 && code.length !== 10) {
        resolve({ found: false, error: "Код має містити 8 цифр (юр. особа) або 10 (ФОП).", code });
        return;
      }
      const rec = EDR_REGISTRY[code];
      if (!rec) { resolve({ found: false, error: "У реєстрі не знайдено. Перевірте код або введіть дані вручну.", code }); return; }
      resolve({ found: true, edrpou: code, source: "ЄДР · Opendatabot (демо)", checkedAt: window.SYS_DATE || "2026-05-29", ...rec });
    }, 650);
  });
};
window.EDR_REGISTRY = EDR_REGISTRY;

// ——— Робочий стан: додані вручну замовники та договори (localStorage) ———
const CP_KEY = "ukrbud_counterparties_v1";
function loadAdded() {
  try { const r = localStorage.getItem(CP_KEY); if (r) { const p = JSON.parse(r); if (p && p.__v === 1) return p; } } catch (e) {}
  return { __v: 1, clients: [], contracts: [] };
}
window.__cpAdded = loadAdded();
function saveAdded() {
  try { localStorage.setItem(CP_KEY, JSON.stringify(window.__cpAdded)); } catch (e) {}
  window.dispatchEvent(new Event("ukrbud-cp"));
}
// домержити збережені додавання у живі масиви DATA (один раз на завантаження)
(function applyAdded() {
  const C = window.DATA.CLIENTS, K = window.DATA.CONTRACTS;
  window.__cpAdded.clients.forEach(c => { if (!C.some(x => x.id === c.id)) C.push(c); });
  window.__cpAdded.contracts.forEach(k => { if (!K.some(x => x.id === k.id)) K.push(k); });
})();

window.useCounterparties = function () {
  const [, force] = React.useState(0);
  React.useEffect(() => {
    const h = () => force(x => x + 1);
    window.addEventListener("ukrbud-cp", h);
    return () => window.removeEventListener("ukrbud-cp", h);
  }, []);
  return window.__cpAdded;
};

window.addClient = function (client) {
  const id = client.id || ("c-" + Date.now());
  const rec = { ...client, id, _added: true };
  window.DATA.CLIENTS.push(rec);
  window.__cpAdded.clients.push(rec);
  saveAdded();
  return rec;
};

window.nextContractNumber = function () {
  const nums = window.DATA.CONTRACTS
    .map(c => { const m = (c.number || "").match(/(\d+)\s*\/\s*2026/); return m ? parseInt(m[1], 10) : 0; });
  const n = (nums.length ? Math.max(0, ...nums) : 0) + 1;
  return `${String(n).padStart(2, "0")}/2026`;
};

window.addContract = function (contract) {
  const id = contract.id || ("k-" + Date.now());
  const rec = { ...contract, id, _added: true };
  window.DATA.CONTRACTS.push(rec);
  window.__cpAdded.contracts.push(rec);
  saveAdded();
  return rec;
};

// Шаблони графіка платежів (% етапів) для нового договору
window.CONTRACT_SCHEDULE_TEMPLATES = [
  { id: "std", label: "Стандартний (аванс 30 / робочий проєкт 50 / завершення 20)",
    stages: [
      { stage: "Аванс при підписанні", pct: 30 },
      { stage: "Здача робочого проєкту", pct: 50 },
      { stage: "Завершальний розрахунок", pct: 20 },
    ] },
  { id: "stages4", label: "Поетапний (20 / 25 / 40 / 15)",
    stages: [
      { stage: "Аванс при підписанні", pct: 20 },
      { stage: "Здача ескізного проєкту", pct: 25 },
      { stage: "Здача робочого проєкту", pct: 40 },
      { stage: "Реєстрація в ЄДЕССБ / завершення", pct: 15 },
    ] },
  { id: "tender", label: "Бюджетний / тендер (аванс 30 / експертиза 15 / РП 40 / решта 15)",
    stages: [
      { stage: "Аванс після тендеру", pct: 30 },
      { stage: "Експертиза кошторису", pct: 15 },
      { stage: "Здача робочого проєкту", pct: 40 },
      { stage: "Експертиза + остаточний", pct: 15 },
    ] },
];

// Побудувати графік платежів із шаблону + загальної суми + дати старту
window.buildSchedule = function (templateId, total, startISO) {
  const tpl = window.CONTRACT_SCHEDULE_TEMPLATES.find(t => t.id === templateId) || window.CONTRACT_SCHEDULE_TEMPLATES[0];
  const start = new Date((startISO || window.SYS_DATE || "2026-05-29") + "T00:00:00");
  let acc = 0;
  return tpl.stages.map((s, i) => {
    let amount = Math.round(total * s.pct / 100);
    acc += amount;
    if (i === tpl.stages.length - 1) amount += (total - acc); // дотягнути до точної суми
    const due = new Date(start); due.setMonth(due.getMonth() + i * 2 + (i === 0 ? 0 : 1));
    const iso = due.toISOString().slice(0, 10);
    return { stage: s.stage, pct: s.pct, amount, dueDate: iso };
  });
};
