/* rapor_donem.js — Dönemsel Rapor modülü */

(function () {

  let _veri = [];
  let _aralik = 'bu_hafta';
  let _baslangic = '';
  let _bitis = '';

  function fmt(val) {
    const n = parseFloat(val) || 0;
    return '₺' + n.toLocaleString('tr-TR', { minimumFractionDigits: 2, maximumFractionDigits: 2 });
  }

  function tarihFmt(str) {
    if (!str) return '—';
    return str.slice(0, 10).split('-').reverse().join('.');
  }

  async function yukle() {
    document.getElementById('rd-loading').style.display = '';
    document.getElementById('rd-empty').style.display = 'none';
    document.getElementById('rd-tbody').innerHTML = '';

    let url = '/api/rapor/donemsel?aralik=' + _aralik;
    if (_aralik === 'ozel' && _baslangic && _bitis) {
      url += '&baslangic=' + _baslangic + '&bitis=' + _bitis;
    }

    try {
      const res  = await fetch(url);
      const json = await res.json();
      if (!json.ok) throw new Error(json.hata || 'Hata');

      _veri = json.data.satirlar;
      ozetGoster(json.data.ozet);
      tabloGoster(_veri);
    } catch (e) {
      console.error('Dönemsel rapor yüklenemedi:', e);
    } finally {
      document.getElementById('rd-loading').style.display = 'none';
    }
  }

  function ozetGoster(oz) {
    document.getElementById('rd-adet').textContent      = oz.satis_adedi;
    document.getElementById('rd-ciro').textContent      = fmt(oz.toplam_ciro);
    document.getElementById('rd-tahsilat').textContent  = fmt(oz.toplam_tahsilat);
    document.getElementById('rd-kalan').textContent     = fmt(oz.toplam_kalan);
  }

  function tabloGoster(satirlar) {
    const tbody = document.getElementById('rd-tbody');

    if (!satirlar.length) {
      document.getElementById('rd-empty').style.display = '';
      return;
    }

    tbody.innerHTML = satirlar.map(s => {
      const kalanClass = s.kalan < 0.01 ? ' zero' : '';
      const trClass    = s.kapali ? ' kapali' : '';
      const badge      = s.kapali
        ? '<span class="rd-badge kapali">Kapandı</span>'
        : '<span class="rd-badge borclu">Borçlu</span>';

      return `
        <tr class="rd-tr${trClass}">
          <td class="rd-td rd-td-tarih">${tarihFmt(s.tarih)}</td>
          <td class="rd-td rd-td-musteri">${esc(s.musteri_ad || '—')}</td>
          <td class="rd-td rd-td-urun">${esc(s.urun_ad || '—')}</td>
          <td class="rd-td rd-td-num rd-td-fiyat">${fmt(s.satis_fiyati)}</td>
          <td class="rd-td rd-td-num">${fmt(s.pesinat)}</td>
          <td class="rd-td rd-td-num">${fmt(s.sonraki_odemeler)}</td>
          <td class="rd-td rd-td-num rd-td-odenen">${fmt(s.toplam_odenen)}</td>
          <td class="rd-td rd-td-num rd-td-kalan${kalanClass}">${s.kapali ? '—' : fmt(s.kalan)}</td>
          <td class="rd-td rd-td-center">${badge}</td>
        </tr>`;
    }).join('');
  }

  function esc(s) {
    return String(s || '')
      .replace(/&/g, '&amp;')
      .replace(/</g, '&lt;')
      .replace(/>/g, '&gt;');
  }

  function excelIndir() {
    if (!_veri.length) return;

    const baslik = ['Tarih','Müşteri','Ürün','Satış Fiyatı','Peşinat','Sonraki Ödemeler','Toplam Ödenen','Kalan','Durum'];
    const satirlar = _veri.map(s => [
      s.tarih ? s.tarih.slice(0,10) : '',
      s.musteri_ad || '',
      s.urun_ad || '',
      s.satis_fiyati,
      s.pesinat,
      s.sonraki_odemeler,
      s.toplam_odenen,
      s.kalan,
      s.kapali ? 'Kapandı' : 'Borçlu',
    ]);

    let csv = '\uFEFF'; // BOM for Excel UTF-8
    csv += baslik.join(';') + '\n';
    satirlar.forEach(s => {
      csv += s.map(c => {
        const v = String(c ?? '').replace(/"/g, '""');
        return `"${v}"`;
      }).join(';') + '\n';
    });

    const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
    const url  = URL.createObjectURL(blob);
    const a    = document.createElement('a');
    a.href     = url;
    a.download = 'rapor_' + (_baslangic || _aralik) + '.csv';
    a.click();
    URL.revokeObjectURL(url);
  }

  window._initRaporDonem = function () {
    _aralik = 'bu_hafta';
    _baslangic = '';
    _bitis = '';

    // Pill'leri resetle
    document.querySelectorAll('#rd-aralik-pills .rd-pill').forEach(b => {
      b.classList.toggle('active', b.dataset.val === 'bu_hafta');
    });
    const ozelWrap = document.getElementById('rd-ozel-wrap');
    if (ozelWrap) ozelWrap.style.display = 'none';

    // Pill tıklamaları
    document.querySelectorAll('#rd-aralik-pills .rd-pill').forEach(btn => {
      btn.addEventListener('click', () => {
        document.querySelectorAll('#rd-aralik-pills .rd-pill').forEach(b => b.classList.remove('active'));
        btn.classList.add('active');
        _aralik = btn.dataset.val;
        const ow = document.getElementById('rd-ozel-wrap');
        if (ow) ow.style.display = _aralik === 'ozel' ? 'flex' : 'none';
        if (_aralik !== 'ozel') yukle();
      });
    });

    const araBtn = document.getElementById('rd-ara-btn');
    if (araBtn) {
      araBtn.addEventListener('click', () => {
        _baslangic = document.getElementById('rd-bas').value;
        _bitis     = document.getElementById('rd-bit').value;
        if (_baslangic && _bitis) yukle();
      });
    }

    const excelBtn = document.getElementById('rd-excel-btn');
    if (excelBtn) excelBtn.addEventListener('click', excelIndir);

    const printBtn = document.getElementById('rd-print-btn');
    if (printBtn) {
      printBtn.style.display = 'flex';
      printBtn.addEventListener('click', () => window.print());
    }

    yukle();
  };

})();
