/* rapor_ozet.js — Özet Rapor modülü */

(function () {

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

  function oran(pay, payda) {
    if (!payda || payda === 0) return '—';
    return ((pay / payda) * 100).toFixed(1) + '% tahsil edildi';
  }

  async function yukle() {
    try {
      const res = await fetch('/api/rapor/ozet');
      const json = await res.json();
      if (!json.ok) throw new Error(json.hata || 'Hata');

      const d = json.data;

      document.getElementById('ro-ciro').textContent = fmt(d.bu_ay_ciro);
      document.getElementById('ro-satis-adet').textContent = d.bu_ay_satis_adet + ' satış';
      document.getElementById('ro-tahsilat').textContent = fmt(d.bu_ay_tahsilat);
      document.getElementById('ro-tahsilat-oran').textContent = oran(d.bu_ay_tahsilat, d.bu_ay_ciro);
      document.getElementById('ro-alacak').textContent = fmt(d.bekleyen_alacak);
      document.getElementById('ro-en-cok').textContent = d.en_cok_satan.ad;
      document.getElementById('ro-en-cok-adet').textContent = d.en_cok_satan.adet + ' adet';

      const now = new Date().toLocaleTimeString('tr-TR', { hour: '2-digit', minute: '2-digit' });
      document.getElementById('ro-guncelleme').textContent = 'Güncellendi: ' + now;

      cizGrafik(d.son_7_gun);

    } catch (e) {
      console.error('Özet rapor yüklenemedi:', e);
    }
  }

  function cizGrafik(gunler) {
    const overlay = document.getElementById('ro-grafik-loading');
    const canvas  = document.getElementById('ro-grafik');
    if (!canvas) return;

    if (overlay) overlay.style.display = 'none';

    const ctx = canvas.getContext('2d');
    const W = canvas.offsetWidth;
    const H = canvas.offsetHeight;

    // HiDPI
    const dpr = window.devicePixelRatio || 1;
    canvas.width  = W * dpr;
    canvas.height = H * dpr;
    ctx.scale(dpr, dpr);

    const padL = 56, padR = 16, padT = 12, padB = 36;
    const chartW = W - padL - padR;
    const chartH = H - padT - padB;

    const maxVal = Math.max(...gunler.map(g => Math.max(g.ciro, g.tahsilat)), 1);
    const nice   = niceMax(maxVal);

    ctx.clearRect(0, 0, W, H);

    // Y ızgara (4 çizgi)
    ctx.strokeStyle = 'rgba(200,148,60,.15)';
    ctx.lineWidth = 1;
    ctx.fillStyle = '#9e8e76';
    ctx.font = '10px system-ui, sans-serif';
    ctx.textAlign = 'right';

    for (let i = 0; i <= 4; i++) {
      const yVal = (nice / 4) * i;
      const yPx  = padT + chartH - (chartH * yVal / nice);
      ctx.beginPath();
      ctx.moveTo(padL, yPx);
      ctx.lineTo(padL + chartW, yPx);
      ctx.stroke();

      ctx.fillText(kısaFmt(yVal), padL - 6, yPx + 3.5);
    }

    const n = gunler.length;
    const grupW = chartW / n;
    const cuburW = Math.min(grupW * 0.32, 22);

    gunler.forEach((g, i) => {
      const xMerkez = padL + grupW * i + grupW / 2;

      // Ciro çubuğu
      const ciroH = chartH * (g.ciro / nice);
      ctx.fillStyle = 'rgba(37,99,235,.75)';
      yuvarlakRect(ctx,
        xMerkez - cuburW - 2, padT + chartH - ciroH,
        cuburW, ciroH, 3
      );

      // Tahsilat çubuğu
      const tahH = chartH * (g.tahsilat / nice);
      ctx.fillStyle = 'rgba(22,163,74,.75)';
      yuvarlakRect(ctx,
        xMerkez + 2, padT + chartH - tahH,
        cuburW, tahH, 3
      );

      // X etiketi
      ctx.fillStyle = '#9e8e76';
      ctx.textAlign = 'center';
      ctx.font = '10px system-ui, sans-serif';
      ctx.fillText(g.etiket, xMerkez, padT + chartH + 18);
    });
  }

  function yuvarlakRect(ctx, x, y, w, h, r) {
    if (h <= 0) return;
    if (h < r * 2) r = h / 2;
    ctx.beginPath();
    ctx.moveTo(x + r, y);
    ctx.lineTo(x + w - r, y);
    ctx.quadraticCurveTo(x + w, y, x + w, y + r);
    ctx.lineTo(x + w, y + h);
    ctx.lineTo(x, y + h);
    ctx.lineTo(x, y + r);
    ctx.quadraticCurveTo(x, y, x + r, y);
    ctx.closePath();
    ctx.fill();
  }

  function niceMax(val) {
    if (val <= 0) return 1000;
    const exp = Math.pow(10, Math.floor(Math.log10(val)));
    const frac = val / exp;
    if (frac <= 1) return exp;
    if (frac <= 2) return 2 * exp;
    if (frac <= 5) return 5 * exp;
    return 10 * exp;
  }

  function kısaFmt(val) {
    if (val >= 1e6) return (val / 1e6).toFixed(1) + 'M';
    if (val >= 1e3) return (val / 1e3).toFixed(0) + 'K';
    return val.toFixed(0);
  }

  // Modül yüklenince çalış
  // Script tag ile ekleniyor; DOM modülü zaten yerinde, hemen başlat
  yukle();

})();
