// vat-data.jsx — облік ПДВ: реєстр податкових накладних, зобов'язання vs кредит.
// ТОВ на загальній системі, платник ПДВ 20%. Дані по місяцях (звітний період).

const VAT_RATE = (window.TAX_RATES && window.TAX_RATES.pdv) || 0.20;
window.VAT_RATE = VAT_RATE;
const vatOf = (base) => Math.round(base * VAT_RATE);
window.vatOf = vatOf;

// Звітні періоди ПДВ (місячний платник)
window.VAT_PERIODS = [
  { id: "2026-05", label: "Травень 2026", status: "open",  payDue: "2026-06-30", paidAt: null },
  { id: "2026-04", label: "Квітень 2026", status: "paid",  payDue: "2026-05-30", paidAt: "2026-05-28" },
];

// Статуси податкових накладних
window.VAT_INV_STATUS = {
  // вихідні (зобов'язання)
  registered: { label: "Зареєстрована",        tone: "live"    },
  pending:    { label: "Очікує реєстрації",     tone: "amber"   },
  overdue:    { label: "Прострочена реєстрація", tone: "late"   },
  // вхідні (кредит)
  credit:     { label: "У кредит",              tone: "live"    },
  awaiting:   { label: "Очікує постачальника",  tone: "amber"   },
  no_vat:     { label: "Без ПДВ (ЄП)",          tone: "neutral" },
  blocked:    { label: "Заблокована ДПС",       tone: "late"    },
};

// Реєстр податкових накладних. kind: out (вихідна, зобов'язання) | in (вхідна, кредит)
const TAX_INVOICES = [
  // ——— ТРАВЕНЬ 2026 (звітний період відкритий) ———
  // вихідні
  { id: "o-05-1", period: "2026-05", kind: "out", date: "2026-05-06", number: "12", party: "ТОВ «Подільський Девелопмент»", edrpou: "41835672", base: 850000, status: "registered", regDate: "2026-05-08", basis: "Рахунок №47 · етап «Робоча документація»", obj: "ЖК-Поділ" },
  { id: "o-05-2", period: "2026-05", kind: "out", date: "2026-05-19", number: "13", party: "Управління освіти м. Києва",       edrpou: "02147853", base: 420000, status: "pending",    regDate: null,        basis: "Рахунок №48 · етап «Стадія П»",         obj: "Школа-23" },
  { id: "o-05-3", period: "2026-05", kind: "out", date: "2026-05-27", number: "14", party: "ПП «Лісове»",                       edrpou: "39184562", base: 145000, status: "registered", regDate: "2026-05-29", basis: "Рахунок №49 · авторський нагляд",       obj: "КОТ-Лісники" },
  // вхідні
  { id: "i-05-1", period: "2026-05", kind: "in",  date: "2026-05-12", number: "СФ-310", party: "ТОВ «Київекспертиза»",          edrpou: "00012543", base: 96000,  status: "credit",   regDate: "2026-05-14", basis: "Експертиза проєкту «Школа-23»",        obj: "Школа-23" },
  { id: "i-05-2", period: "2026-05", kind: "in",  date: "2026-05-15", number: "АР-88",  party: "ТОВ «Архітектурні рішення»",     edrpou: "41789632", base: 180000, status: "awaiting", regDate: null,        basis: "Субпідряд · розділ АР",               obj: "ЖК-Поділ" },
  { id: "i-05-3", period: "2026-05", kind: "in",  date: "2026-05-20", number: "ЕП-145", party: "ТОВ «ЕнергоПроект»",             edrpou: "39875421", base: 72000,  status: "credit",   regDate: "2026-05-22", basis: "Субпідряд · зовнішні мережі",         obj: "КОТ-Лісники" },
  { id: "i-05-4", period: "2026-05", kind: "in",  date: "2026-05-02", number: "ОР-05",  party: "ТОВ «Бізнес-Центр Хорива»",      edrpou: "38217604", base: 38000,  status: "credit",   regDate: "2026-05-05", basis: "Оренда офісу за травень",             obj: null },
  { id: "i-05-5", period: "2026-05", kind: "in",  date: "2026-05-18", number: "12",     party: "ФОП Іваненко О.І.",              edrpou: "2987654321", base: 60000, status: "no_vat",  regDate: null,        basis: "Геодезичні роботи (єдиний податок)",  obj: "КОТ-Лісники" },
  { id: "i-05-6", period: "2026-05", kind: "in",  date: "2026-05-23", number: "INT-552",party: "ТОВ «Датагруп»",                 edrpou: "31720394", base: 12000,  status: "credit",   regDate: "2026-05-24", basis: "Інтернет, хостинг, ПЗ",               obj: null },

  // ——— КВІТЕНЬ 2026 (період подано і сплачено) ———
  { id: "o-04-1", period: "2026-04", kind: "out", date: "2026-04-09", number: "09", party: "ТОВ «Подільський Девелопмент»", edrpou: "41835672", base: 760000, status: "registered", regDate: "2026-04-11", basis: "Рахунок №42 · етап «Стадія П»",  obj: "ЖК-Поділ" },
  { id: "o-04-2", period: "2026-04", kind: "out", date: "2026-04-21", number: "10", party: "Міністерство юстиції України",   edrpou: "00015622", base: 300000, status: "registered", regDate: "2026-04-23", basis: "Рахунок №43 · обстеження",       obj: "Мінюст-СС2" },
  { id: "o-04-3", period: "2026-04", kind: "out", date: "2026-04-28", number: "11", party: "Управління освіти м. Києва",     edrpou: "02147853", base: 180000, status: "registered", regDate: "2026-04-30", basis: "Рахунок №44 · етап «ЕП»",         obj: "Школа-23" },
  { id: "i-04-1", period: "2026-04", kind: "in",  date: "2026-04-10", number: "СФ-298", party: "ТОВ «Київекспертиза»",       edrpou: "00012543", base: 80000,  status: "credit", regDate: "2026-04-12", basis: "Експертиза «Мінюст»",            obj: "Мінюст-СС2" },
  { id: "i-04-2", period: "2026-04", kind: "in",  date: "2026-04-15", number: "АР-81",  party: "ТОВ «Архітектурні рішення»", edrpou: "41789632", base: 120000, status: "credit", regDate: "2026-04-17", basis: "Субпідряд · розділ АР",          obj: "ЖК-Поділ" },
  { id: "i-04-3", period: "2026-04", kind: "in",  date: "2026-04-03", number: "ОР-04",  party: "ТОВ «Бізнес-Центр Хорива»",  edrpou: "38217604", base: 38000,  status: "credit", regDate: "2026-04-05", basis: "Оренда офісу за квітень",        obj: null },
  { id: "i-04-4", period: "2026-04", kind: "in",  date: "2026-04-18", number: "ІГ-77",  party: "ТОВ «Інженерна геологія»",   edrpou: "32147589", base: 90000,  status: "credit", regDate: "2026-04-20", basis: "Інженерно-геологічні вишукування", obj: "КОТ-Лісники" },
  { id: "i-04-5", period: "2026-04", kind: "in",  date: "2026-04-25", number: "INT-540",party: "ТОВ «Датагруп»",             edrpou: "31720394", base: 9000,   status: "credit", regDate: "2026-04-26", basis: "Інтернет, хостинг",              obj: null },
];
window.TAX_INVOICES = TAX_INVOICES;

// Підсумок ПДВ за період — рахується з реєстру (плюс додані вручну рядки extra)
window.vatSummary = function (periodId, extra) {
  const rows = TAX_INVOICES.concat(extra || []).filter(r => r.period === periodId);
  let output = 0, outputUnreg = 0, input = 0, inputStuck = 0;
  let cntUnreg = 0, cntStuck = 0;
  rows.forEach(r => {
    const v = vatOf(r.base);
    if (r.kind === "out") {
      output += v;                                  // зобов'язання виникає за датою першої події
      if (r.status !== "registered") { outputUnreg += v; cntUnreg++; }
    } else {
      if (r.status === "credit") input += v;        // у кредит лише зареєстровані
      else if (r.status === "awaiting" || r.status === "blocked") { inputStuck += v; cntStuck++; }
    }
  });
  return { rows, output, input, payable: output - input, outputUnreg, inputStuck, cntUnreg, cntStuck };
};

// Міст у P&L: фактичний вхідний ПДВ із зареєстрованих вхідних накладних (за рік)
window.inputVatAnnual = function (year) {
  const y = String(year || "2026");
  return TAX_INVOICES
    .filter(r => r.kind === "in" && r.status === "credit" && r.period.startsWith(y))
    .reduce((s, r) => s + vatOf(r.base), 0);
};
