// profit-report.jsx — Фінансовий результат (P&L) для ТОВ
// Загальна система оподаткування, платник ПДВ. Період — рік.

window.TAX_RATES = {
  profit: 0.18,   // податок на прибуток
  pdv:    0.20,   // ПДВ
  esv:    0.22,   // ЄСВ (нарахування роботодавця)
  pdfo:   0.18,   // ПДФО (утримання)
  vz:     0.05,   // військовий збір (утримання)
};

// Річний P&L — рахується наживо з даних договорів, ЗП, витрат і амортизації
window.computeAnnualPL = (year = "2026") => {
  const T = window.TAX_RATES;

  // 1) Дохід — нараховані етапи договорів за рік (з ПДВ), переводимо в «без ПДВ»
  let revenueGross = 0;
  window.DATA.CONTRACTS.forEach(c => {
    c.schedule.forEach(s => {
      if ((s.dueDate || "").startsWith(year)) revenueGross += s.amount;
    });
  });
  const revenueNet = Math.round(revenueGross / (1 + T.pdv));
  const vatOutput  = revenueGross - revenueNet;

  // 2) Фонд оплати праці (штатні + часткові) та ЄСВ
  const payrollMonthly = window.DATA.TEAM
    .filter(p => p.employment !== "contractor")
    .reduce((s, p) => {
      const pay = window.computePayroll(p.id, p.partRate ? 88 : 176, 176);
      return s + (pay ? pay.gross : 0);
    }, 0);
  const payroll = payrollMonthly * 12;
  const esv = Math.round(payroll * T.esv);

  // 3) Витрати за категоріями (річні): recurring × 12 + разові цього року
  const annualForCats = (catIds) =>
    window.DATA.EXPENSES.filter(e => catIds.includes(e.cat)).reduce((s, e) => {
      if (e.periodicity === "once") {
        const d = e.paidDate || e.nextDate || "";
        return s + (d.startsWith(year) ? e.amount : 0);
      }
      return s + (e.monthlyAmount || 0) * 12;
    }, 0);

  const admCats   = window.EXPENSE_CATEGORIES.filter(c => c.type === "adm").map(c => c.id);
  const subExp    = annualForCats(["subcontract", "expertise"]);
  const zvvOther  = annualForCats(["delivery", "fuel", "training"]);
  const adm       = annualForCats(admCats);

  // 4) Амортизація майна (зі Складу)
  const amort = window.DATA.ASSETS
    .filter(a => a.status !== "written_off")
    .reduce((s, a) => s + window.computeDepreciation(a).monthly, 0) * 12;

  const expenses = payroll + esv + subExp + amort + adm + zvvOther;
  const operating = revenueNet - expenses;
  const profitTax = Math.max(0, Math.round(operating * T.profit));
  const netProfit = operating - profitTax;
  const margin = revenueNet ? (netProfit / revenueNet) * 100 : 0;

  // 5) ПДВ: зобов'язання − вхідний кредит (фактичний — із податкових накладних по витратах)
  const vatInput = window.inputVatAnnual ? window.inputVatAnnual() : Math.round((adm + zvvOther + subExp) / 6);
  const vatPayable = vatOutput - vatInput;

  return {
    year, revenueGross, revenueNet, vatOutput, vatInput, vatPayable,
    payroll, esv, subExp, amort, adm, zvvOther,
    expenses, operating, profitTax, netProfit, margin,
  };
};

// ============ СТОРІНКА P&L ============
function FinancialReportPage({ onBack, role }) {
  const pl = window.computeAnnualPL("2026");
  const m = window.formatMoney;
  const showCash = window.useCashVisible() && window.canSeeCash(role);
  const cashAnnual = window.totalCashMonthly() * 12;
  const mgmtProfit = pl.netProfit - cashAnnual;

  // Склад витрат для смуги
  const segs = [
    { label: "Оплата праці",        val: pl.payroll, color: "#015B76" },
    { label: "ЄСВ 22%",             val: pl.esv,     color: "#3c6287" },
    { label: "Адміністративні",     val: pl.adm,     color: "#5FB3CA" },
    { label: "Амортизація",         val: pl.amort,   color: "#1F7553" },
    { label: "Субпідряд/експертиза",val: pl.subExp,  color: "#8ec975" },
    { label: "Інші ЗВВ",            val: pl.zvvOther,color: "#d4a373" },
  ];

  return (
    <div className="page">
      {onBack && <button className="back-link" onClick={onBack}>← Усі внутрішні звіти</button>}

      <div className="page-head" style={{marginTop: 10}}>
        <h1 className="page-h1">Фінансовий результат · P&amp;L</h1>
        <div className="page-sub">
          <span>рік {pl.year}</span>
          <span className="dot"></span>
          <span>ТОВ · загальна система</span>
          <span className="dot"></span>
          <span>платник ПДВ</span>
          <span className="dot"></span>
          <span>метод нарахування</span>
          <span style={{marginLeft: "auto"}}><window.CashToggle role={role} /></span>
        </div>
      </div>

      <div className="kpi-row" style={{gridTemplateColumns: "repeat(4, 1fr)"}}>
        <div className="kpi">
          <div className="kpi-label">Дохід (без ПДВ)</div>
          <div className="kpi-value" style={{fontSize: 22}}>{m(pl.revenueNet)} <span style={{fontSize: 14, color: "var(--ink-3)"}}>₴</span></div>
          <div className="kpi-sub">з ПДВ: {m(pl.revenueGross)} ₴</div>
        </div>
        <div className="kpi">
          <div className="kpi-label">Витрати разом</div>
          <div className="kpi-value" style={{fontSize: 22}}>{m(pl.expenses)} <span style={{fontSize: 14, color: "var(--ink-3)"}}>₴</span></div>
          <div className="kpi-sub">{Math.round(pl.expenses / pl.revenueNet * 100)}% доходу</div>
        </div>
        <div className="kpi">
          <div className="kpi-label">Чистий прибуток</div>
          <div className="kpi-value" style={{fontSize: 22, color: pl.netProfit >= 0 ? "var(--c-green-deep)" : "var(--late)"}}>{m(pl.netProfit)} <span style={{fontSize: 14, color: "var(--ink-3)"}}>₴</span></div>
          <div className="kpi-sub">після податку на прибуток</div>
        </div>
        <div className="kpi">
          <div className="kpi-label">Рентабельність</div>
          <div className="kpi-value" style={{color: pl.margin >= 0 ? "var(--c-green-deep)" : "var(--late)"}}>{pl.margin.toFixed(1)}<span style={{fontSize: 16}}>%</span></div>
          <div className="kpi-sub">чистий прибуток / дохід</div>
        </div>
      </div>

      {/* Звіт P&L */}
      <section className="section">
        <div className="section-head">
          <h2 className="section-h2">Звіт про фінансові результати</h2>
          <span className="section-sub">за {pl.year} рік</span>
        </div>
        <div className="pl-sheet">
          <div className="pl-group-h">Доходи</div>
          <div className="formula-row formula-base">
            <span className="formula-label">Дохід від реалізації проєктних робіт</span>
            <span className="formula-note">без ПДВ · нараховано за етапами договорів</span>
            <span className="formula-val num-bold">{m(pl.revenueNet)} ₴</span>
          </div>

          <div className="pl-group-h">Собівартість і прямі витрати</div>
          <div className="formula-row">
            <span className="formula-label">Оплата праці (виробничий персонал)</span>
            <span className="formula-note">нарахована ЗП штатних і часткових · ×12</span>
            <span className="formula-val">− {m(pl.payroll)} ₴</span>
          </div>
          <div className="formula-row">
            <span className="formula-label">ЄСВ {Math.round(window.TAX_RATES.esv*100)}% (нарахування роботодавця)</span>
            <span className="formula-note">ПДФО 18% і ВЗ 5% утримуються із ЗП</span>
            <span className="formula-val">− {m(pl.esv)} ₴</span>
          </div>
          <div className="formula-row">
            <span className="formula-label">Субпідряд і експертиза</span>
            <span className="formula-note">залучені організації · по об'єктах</span>
            <span className="formula-val">− {m(pl.subExp)} ₴</span>
          </div>
          <div className="formula-row">
            <span className="formula-label">Амортизація майна</span>
            <span className="formula-note">прямолінійна · зі Складу</span>
            <span className="formula-val">− {m(pl.amort)} ₴</span>
          </div>

          <div className="pl-group-h">Операційні витрати</div>
          <div className="formula-row">
            <span className="formula-label">Адміністративні (АДМ)</span>
            <span className="formula-note">оренда, ПЗ, зв'язок, реклама, банк</span>
            <span className="formula-val">− {m(pl.adm)} ₴</span>
          </div>
          <div className="formula-row">
            <span className="formula-label">Загальновиробничі інші (ЗВВ)</span>
            <span className="formula-note">пальне, виїзди, навчання</span>
            <span className="formula-val">− {m(pl.zvvOther)} ₴</span>
          </div>

          <div className="formula-row formula-sub">
            <span className="formula-label">Усього витрат</span>
            <span></span>
            <span className="formula-val num-bold">− {m(pl.expenses)} ₴</span>
          </div>
          <div className="formula-row formula-final">
            <span className="formula-label">Прибуток до оподаткування</span>
            <span></span>
            <span className="formula-val">{m(pl.operating)} ₴</span>
          </div>
          <div className="formula-row">
            <span className="formula-label">Податок на прибуток {Math.round(window.TAX_RATES.profit*100)}%</span>
            <span className="formula-note">загальна система</span>
            <span className="formula-val">− {m(pl.profitTax)} ₴</span>
          </div>
          <div className={`formula-row formula-margin ${pl.netProfit >= 0 ? "is-good" : "is-bad"}`}>
            <span className="formula-label">Чистий прибуток</span>
            <span className="formula-note">рентабельність {pl.margin.toFixed(1)}%</span>
            <span className="formula-val">{m(pl.netProfit)} ₴</span>
          </div>

          {showCash && cashAnnual > 0 && <>
            <div className="pl-group-h">Управлінські коригування · конфіденційно</div>
            <div className="formula-row">
              <span className="formula-label">Готівкові виплати (в конверті)</span>
              <span className="formula-note">поза офіційним обліком · {m(window.totalCashMonthly())} ₴/міс</span>
              <span className="formula-val">− {m(cashAnnual)} ₴</span>
            </div>
            <div className={`formula-row formula-margin ${mgmtProfit >= 0 ? "is-good" : "is-bad"}`}>
              <span className="formula-label">Реальний результат (управлінський)</span>
              <span className="formula-note">після готівкових виплат</span>
              <span className="formula-val">{m(mgmtProfit)} ₴</span>
            </div>
          </>}
        </div>
      </section>

      {/* Структура витрат */}
      <section className="section">
        <div className="section-head">
          <h2 className="section-h2">Структура витрат</h2>
          <span className="section-sub">{m(pl.expenses)} ₴ разом</span>
        </div>
        <div className="break-stack">
          <div className="break-bar" style={{height: 32}}>
            {segs.filter(s => s.val > 0).map((s, i) => (
              <div key={i} className="break-bar-seg" style={{flex: s.val, background: s.color}} title={`${s.label} · ${m(s.val)} ₴`}></div>
            ))}
          </div>
          <div className="pl-legend">
            {segs.map((s, i) => (
              <div key={i} className="pl-legend-item">
                <span className="pl-legend-dot" style={{background: s.color}}></span>
                <span className="pl-legend-lbl">{s.label}</span>
                <span className="pl-legend-val">{m(s.val)} ₴</span>
                <span className="pl-legend-pct">{Math.round(s.val / pl.expenses * 100)}%</span>
              </div>
            ))}
          </div>
        </div>
      </section>

      {/* ПДВ */}
      <section className="section">
        <div className="section-head">
          <h2 className="section-h2">Податок на додану вартість</h2>
          <span className="section-sub">не входить у прибуток — окреме зобов'язання</span>
        </div>
        <div className="pl-sheet">
          <div className="formula-row">
            <span className="formula-label">ПДВ зобов'язання (з реалізації)</span>
            <span className="formula-note">{Math.round(window.TAX_RATES.pdv*100)}% від доходу</span>
            <span className="formula-val">{m(pl.vatOutput)} ₴</span>
          </div>
          <div className="formula-row">
            <span className="formula-label">ПДВ кредит (вхідний)</span>
            <span className="formula-note">фактичний · з податкових накладних по витратах</span>
            <span className="formula-val">− {m(pl.vatInput)} ₴</span>
          </div>
          <div className="formula-row formula-final">
            <span className="formula-label">ПДВ до сплати</span>
            <span></span>
            <span className="formula-val">{m(pl.vatPayable)} ₴</span>
          </div>
        </div>
      </section>

      <div className="hint-box">
        <b>Методика:</b> метод нарахування — дохід визнається за здачею етапів договорів, незалежно від оплати.
        Дохід показано без ПДВ. ЄСВ 22% — нарахування роботодавця понад ЗП; ПДФО 18% і ВЗ 5% утримуються із ЗП і вже враховані у фонді.
        Амортизація береться з модуля «Склад». Податок на прибуток 18%, ПДВ 20%. Вхідний ПДВ рахується з фактичних витрат — лише за позиціями із зареєстрованою податковою накладною (модуль «Витрати»).
        Це управлінський розрахунок, не заміняє декларацію.
      </div>

      <div className="inv-actions">
        <button className="btn btn-primary">Експорт P&amp;L (PDF / Excel)</button>
        <button className="btn">Деталізація по місяцях</button>
      </div>
    </div>
  );
}

window.FinancialReportPage = FinancialReportPage;
