/* ============ DocPaper — printable Kazakhstan forms (КП / счёт-фактура / акт / накладная) ============ */
/* Self-contained: exposes window.DocPaper (and helpers sumWords / money for reuse).             */
/* Depends on SW.* data being available (provider, buyer, serviceCatalog, dstr).                 */

/* ---- number to words (тенге) ---- */
function sumWords(n){
  n=Math.round(n);
  const ones=['','один','два','три','четыре','пять','шесть','семь','восемь','девять','десять','одиннадцать','двенадцать','тринадцать','четырнадцать','пятнадцать','шестнадцать','семнадцать','восемнадцать','девятнадцать'];
  const onesF=['','одна','две','три','четыре','пять','шесть','семь','восемь','девять'];
  const tens=['','','двадцать','тридцать','сорок','пятьдесят','шестьдесят','семьдесят','восемьдесят','девяносто'];
  const huns=['','сто','двести','триста','четыреста','пятьсот','шестьсот','семьсот','восемьсот','девятьсот'];
  function triplet(num,fem){
    let s=[];
    s.push(huns[Math.floor(num/100)]);
    const r=num%100;
    if(r<20 && r>0){ s.push((fem&&r<10?onesF:ones)[r]); }
    else { s.push(tens[Math.floor(r/10)]); const o=r%10; if(o) s.push((fem?onesF:ones)[o]); }
    return s.filter(Boolean).join(' ');
  }
  if(n===0) return 'ноль тенге 00 тиын';
  const mil=Math.floor(n/1e6), th=Math.floor((n%1e6)/1000), h=n%1000;
  let parts=[];
  if(mil){ parts.push(triplet(mil)+' '+plural(mil,'миллион','миллиона','миллионов')); }
  if(th){ parts.push(triplet(th,true)+' '+plural(th,'тысяча','тысячи','тысяч')); }
  if(h){ parts.push(triplet(h)); }
  let words=parts.join(' ').trim();
  words=words.charAt(0).toUpperCase()+words.slice(1);
  return words+' '+plural(h||th||mil,'тенге','тенге','тенге')+' 00 тиын';
}
function plural(n,a,b,c){ n=Math.abs(n)%100; const n1=n%10; if(n>10&&n<20) return c; if(n1>1&&n1<5) return b; if(n1===1) return a; return c; }
const money=n=>new Intl.NumberFormat('ru-RU').format(n);

/* ---- build line items from doc ---- */
function buildLines(doc){
  return (doc.items||[]).map(it=>{
    const svc=SW.serviceCatalog[it.s];
    const qty = it.d ? +(it.q*it.d).toFixed(1) : it.q;
    const qtyLabel = it.d ? (it.q+' т × '+it.d+' сут') : it.q;
    const net = Math.round(svc.price*qty);
    return {name:svc.name, unit:svc.unit, qtyLabel, price:svc.price, net};
  });
}

function DocPaper({doc}){
  const P=SW.provider, B=SW.buyer;
  const lines=buildLines(doc);
  const net=lines.reduce((s,l)=>s+l.net,0);
  const nds=Math.round(net*0.12);
  const gross=net+nds;

  if(doc.type==='waybill'){
    return (
      <div className="doc-paper">
        <div className="doc-meta">Форма СМГС / АО «НК «Қазақстан темір жолы»</div>
        <div className="doc-title">НАКЛАДНАЯ № {doc.no}</div>
        <div className="doc-sub">Железнодорожная накладная на перевозку груза · {SW.dstr(doc.date)}</div>
        <div className="doc-rail">
          <div className="cell"><div className="k">Станция отправления</div><div className="v">{doc.from}, КТЖ</div></div>
          <div className="cell"><div className="k">Станция назначения</div><div className="v">{doc.to}, КТЖ</div></div>
          <div className="cell"><div className="k">Отправитель</div><div className="v">{B.name}</div></div>
          <div className="cell"><div className="k">Получатель</div><div className="v">{B.name}</div></div>
          <div className="cell"><div className="k">БИН отправителя</div><div className="v">{B.bin}</div></div>
          <div className="cell"><div className="k">№ вагона</div><div className="v">{doc.wagon}</div></div>
          <div className="cell"><div className="k">Род вагона</div><div className="v">Крытый, 4-осный</div></div>
          <div className="cell"><div className="k">Грузоподъёмность</div><div className="v">68 т</div></div>
        </div>
        <table className="doc-tbl">
          <thead><tr><th>Наименование груза</th><th>Знаки, марки</th><th>Число мест</th><th>Род упаковки</th><th>Масса, кг</th></tr></thead>
          <tbody>
            <tr><td>{doc.cargoName}</td><td className="c">—</td><td className="c">{doc.places}</td><td className="c">Паллеты</td><td className="r">{money(Math.round(parseFloat(doc.weight.replace(',','.'))*1000))}</td></tr>
          </tbody>
          <tfoot><tr><td colSpan={2}>Итого</td><td className="c">{doc.places}</td><td></td><td className="r">{money(Math.round(parseFloat(doc.weight.replace(',','.'))*1000))} кг</td></tr></tfoot>
        </table>
        <div className="doc-rail" style={{gridTemplateColumns:'1fr 1fr 1fr'}}>
          <div className="cell"><div className="k">Объявленная ценность</div><div className="v">Без объявления</div></div>
          <div className="cell"><div className="k">Способ определения массы</div><div className="v">Взвешивание</div></div>
          <div className="cell"><div className="k">Контейнер / пломбы</div><div className="v">КТЖ 4471{doc.no.slice(-3)}</div></div>
        </div>
        <div className="doc-sign">
          <div><div className="role">Календарный штемпель станции отправления</div><div className="line"></div><div className="who">{doc.from} · {SW.dstr(doc.date)}</div></div>
          <div><div className="role">Подпись приёмосдатчика</div><div className="line"></div><div className="who">Оператор терминала Silkway</div></div>
        </div>
        <div className="doc-stamp">КТЖ<br/>{doc.from}<br/>станция</div>
      </div>
    );
  }

  // invoice / act / bill / quote (КП) share parties + table
  const titleMap={invoice:'СЧЁТ-ФАКТУРА',act:'АКТ ОКАЗАННЫХ УСЛУГ',bill:'СЧЁТ НА ОПЛАТУ',quote:'КОММЕРЧЕСКОЕ ПРЕДЛОЖЕНИЕ'};
  return (
    <div className="doc-paper">
      <div className="doc-meta">{doc.type==='invoice'?'Приложение 30 к приказу Министра финансов РК · Форма счёта-фактуры':doc.type==='quote'?'Коммерческое предложение · СП Silkway CA':'Договор на оказание услуг '+doc.contract}</div>
      <div className="doc-title">{titleMap[doc.type]} № {doc.no}</div>
      <div className="doc-sub">от {SW.dstr(doc.date)} г.{doc.period?' · период оказания услуг: '+doc.period:''}</div>

      {doc.type==='bill' && (
        <div className="doc-bank">
          <table><tbody>
            <tr><td className="k">Бенефициар</td><td colSpan={3}><b>{P.name}</b></td></tr>
            <tr><td className="k">БИН</td><td>{P.bin}</td><td className="k">КБе</td><td>{P.kbe}</td></tr>
            <tr><td className="k">ИИК</td><td>{P.iik}</td><td className="k">БИК</td><td>{P.bik}</td></tr>
            <tr><td className="k">Банк</td><td colSpan={3}>{P.bank}</td></tr>
          </tbody></table>
        </div>
      )}

      <div className="doc-parties">
        <div className="doc-party">
          <div className="lab">{doc.type==='act'?'Исполнитель':'Поставщик'}</div>
          <div className="nm">{P.name}</div>
          <div className="ln">БИН: <b>{P.bin}</b></div>
          <div className="ln">{P.addr}</div>
          <div className="ln">ИИК: {P.iik}</div>
          <div className="ln">{P.bank}, БИК {P.bik}</div>
          {doc.type==='invoice' && <div className="ln">Свид. НДС: {P.nds}</div>}
        </div>
        <div className="doc-party">
          <div className="lab">{doc.type==='act'?'Заказчик':'Получатель'}</div>
          <div className="nm">{B.name}</div>
          <div className="ln">БИН: <b>{B.bin}</b></div>
          <div className="ln">{B.addr}</div>
          <div className="ln">ИИК: {B.iik}</div>
          <div className="ln">{B.bank}, БИК {B.bik}</div>
        </div>
      </div>

      <div className="doc-meta" style={{margin:'10px 0 0',color:'#555'}}>Договор: {doc.contract} · Груз: {doc.cargo} · Вагон {doc.wagon}</div>

      <table className="doc-tbl">
        <thead><tr>
          <th style={{width:28}}>№</th><th>Наименование услуги</th><th>Кол-во</th><th>Ед.</th>
          <th>Цена, ₸</th><th>Сумма без НДС</th>{doc.type==='invoice'&&<><th>НДС 12%</th><th>Сумма с НДС</th></>}
        </tr></thead>
        <tbody>
          {lines.map((l,i)=>(
            <tr key={i}>
              <td className="c">{i+1}</td><td>{l.name}</td><td className="c">{l.qtyLabel}</td><td className="c">{l.unit}</td>
              <td className="r">{money(l.price)}</td><td className="r">{money(l.net)}</td>
              {doc.type==='invoice'&&<><td className="r">{money(Math.round(l.net*0.12))}</td><td className="r">{money(Math.round(l.net*1.12))}</td></>}
            </tr>
          ))}
        </tbody>
        <tfoot>
          <tr><td colSpan={doc.type==='invoice'?5:5} className="r">Итого без НДС:</td><td className="r">{money(net)}</td>{doc.type==='invoice'&&<><td className="r">{money(nds)}</td><td className="r">{money(gross)}</td></>}</tr>
          {doc.type!=='invoice' && <tr><td colSpan={5} className="r">НДС 12%:</td><td className="r">{money(nds)}</td></tr>}
          <tr><td colSpan={doc.type==='invoice'?7:5} className="r">Всего к оплате:</td><td className="r">{money(gross)} ₸</td></tr>
        </tfoot>
      </table>

      <div className="doc-words">
        Всего наименований {lines.length}, на сумму <b>{money(gross)} ₸</b>.<br/>
        Сумма прописью: <b>{sumWords(gross)}</b>, в том числе НДС 12% — {money(nds)} ₸.
      </div>

      {doc.type==='bill' && <div className="doc-meta" style={{color:'#b66100',fontWeight:600}}>Оплатить до {doc.due?SW.dstr(doc.due):'—'}. Оплата настоящего счёта означает согласие с условиями договора.</div>}
      {doc.type==='act' && <div style={{fontSize:12,margin:'10px 0'}}>Услуги оказаны полностью и в срок. Заказчик претензий по объёму, качеству и срокам оказания услуг не имеет.</div>}
      {doc.type==='quote' && <div style={{fontSize:12,margin:'10px 0',color:'#555'}}>Предложение действительно до {doc.due?SW.dstr(doc.due):'—'}. Условия: предоплата 30%, остаток по факту оказания услуг.</div>}

      <div className="doc-sign">
        <div>
          <div className="role">{doc.type==='act'?'Исполнитель':'Поставщик'} {doc.type==='bill'?'/ Руководитель':''}</div>
          <div className="line"></div>
          <div className="who">{P.director} · М.П.</div>
          {doc.type==='invoice' && <><div className="line" style={{marginTop:18}}></div><div className="who">Гл. бухгалтер: {P.accountant}</div></>}
        </div>
        <div>
          <div className="role">{doc.type==='act'?'Заказчик':'Получатель'}</div>
          <div className="line"></div>
          <div className="who">{B.director} · М.П.</div>
        </div>
      </div>
      <div className="doc-stamp">{P.name.replace('ТОО ','').replace(/[«»]/g,'')}<br/>БИН {P.bin}<br/>Алматы</div>
    </div>
  );
}

window.DocPaper = DocPaper;
window.sumWords = sumWords;
window.money = money;
