const express = require('express');
const router = express.Router();

// Importă conexiunea la baza de date
const pool = require('../db'); 

// Importă middleware-ul de autentificare
const authenticateToken = require('../middleware/auth');
// Express.js
router.get('/facturi', async (req, res) => {
  const { start, end } = req.query;

  try {
    const [facturi] = await pool.promise().query(`
      SELECT 
        r.id_receptie, r.numar_document, r.data_document, r.total_achizitie_cu_tva AS total,

        -- Furnizor
        f.denumire AS furnizor_nume,
        f.cui AS furnizor_cif,
        f.cod_inmatriculare AS furnizor_reg,
        f.adresa AS furnizor_adresa,
        f.judet AS furnizor_judet,
        f.localitate AS furnizor_localitate,
        f.tel AS furnizor_telefon,

        -- Client
        ff.denumire AS client_nume,
        ff.cui AS client_cif,
        ff.cod_inmatriculare AS client_reg,
        ff.adresa AS client_adresa,

        -- Produse
        pr.id_produs, pr.denumire, pr.cantitate, pr.pret_unitar,
        pr.valoare, pr.valoare_tva, pr.pret_vanzare,
        pr.unitate_masura, pr.cod_gestiune,
        g.cont_gestiune, p.tva_int,

        -- TVA din cote_tva, redenumit ca procent_tva
        ct.valoare_tva AS procent_tva

      FROM receptii r

      JOIN furnizori f ON f.id_furnizor = r.id_furnizor
      JOIN firma ff ON ff.id_firma = r.id_firma

      LEFT JOIN produse_receptie pr ON pr.id_receptie = r.id_receptie
      LEFT JOIN gestiuni g ON g.id_gestiune = pr.id_gestiune
      LEFT JOIN products p ON pr.id_produs = p.id
      LEFT JOIN cote_tva ct ON p.vat_rate = ct.id_cota

      WHERE DATE(r.data_document) BETWEEN ? AND ?
      ORDER BY r.id_receptie, pr.id_produs
    `, [start, end]);

    const grouped = {};

    for (const row of facturi) {
      if (!grouped[row.id_receptie]) {
        grouped[row.id_receptie] = {
          antet: {
            furnizorNume: row.furnizor_nume,
            furnizorCIF: row.furnizor_cif,
            furnizorReg: row.furnizor_reg,
            furnizorAdresa: row.furnizor_adresa,
            furnizorJudet: row.furnizor_judet,
            furnizorLocalitate: row.furnizor_localitate,
            furnizorTelefon: row.furnizor_telefon,

            clientNume: row.client_nume,
            clientCIF: row.client_cif,
            clientReg: row.client_reg,
            clientAdresa: row.client_adresa,

            facturaid: row.id_receptie,
            facturaNumar: row.numar_document,
            facturaData: row.data_document,
            facturaScadenta: row.data_document,
            facturaMoneda: 'RON',
            facturaTip: 'F',
            facturaCurs: '0.0000',
            facturaTVAIncasare: 'Nu',
            facturaTaxareInversa: 'Nu',
            facturaCotaTVA: row.procent_tva, // ✅ corect, procent TVA
            facturaGreutate: '0.000',
            facturaIndexSPV: '',
          },
          produse: [],
          total: row.total,
        };
      }

      grouped[row.id_receptie].produse.push({
        codArticol: row.id_produs,
        denumire: row.denumire,
        cantitate: row.cantitate,
        pret: row.pret_unitar,
        valoare: row.valoare,
       tva_int: row.tva_int,
        tva: row.valoare_tva,
        procentTVA: row.procent_tva, // ✅ adăugat și în fiecare produs dacă vrei
        pretVanzare: row.pret_vanzare,
        um: row.unitate_masura,
        contGestiune: row.cod_gestiune,
        tip_produs: '01',
        den_tip: 'Marfuri',
      });
    }

    res.json(Object.values(grouped));
  } catch (err) {
    console.error('Eroare la preluare facturi:', err.message);
    res.status(500).json({ error: 'Eroare la preluarea facturilor' });
  }
});

router.get('/iesiri', async (req, res) => {
  const { start, end } = req.query;

  try {
    const [facturi] = await pool.promise().query(`
      SELECT 
        r.id_factura, r.numar_int, r.data_document, r.total_vanzare_cu_tva AS total,
        
        -- Furnizor (din tabela furnizori)
        ff.denumire AS furnizor_nume,
        ff.cui AS furnizor_cif,
        ff.cod_inmatriculare AS furnizor_reg,
        ff.adresa AS furnizor_adresa,
       
        ff.judet AS furnizor_judet,
        ff.localitate AS furnizor_localitate,
        ff.tel AS furnizor_telefon,
       

        -- Client (firma ta)
        f.denumire AS client_nume,
        f.cui AS client_cif,
        f.cod_inmatriculare AS client_reg,
        f.adresa AS client_adresa,
        f.judet AS client_judet,
         pr.id_produs, pr.denumire, pr.cantitate, pr.pret_unitar, pr.valoare, pr.valoare_tva, pr.pret_vanzare, pr.unitate_masura, pr.cod_gestiune,
        g.cont_gestiune

      FROM facturi r

      JOIN furnizori f ON f.id_furnizor = r.id_furnizor
      JOIN firma ff ON ff.id_firma = r.id_firma

      LEFT JOIN facturi_produse pr ON pr.id_factura = r.id_factura
      LEFT JOIN gestiuni g ON g.id_gestiune = pr.id_gestiune

      WHERE DATE(r.data_document) BETWEEN ? AND ?
      ORDER BY r.id_factura, pr.id_produs
    `, [start, end]);

    const grouped = {};

    for (const row of facturi) {
      if (!grouped[row.id_receptie]) {
        grouped[row.id_receptie] = {
          antet: {
            furnizorNume: row.furnizor_nume,
            furnizorCIF: row.furnizor_cif,
            furnizorReg: row.furnizor_reg,
            furnizorAdresa: row.furnizor_adresa,
            furnizorJudet: row.furnizor_judet,
            furnizorLocalitate: row.furnizor_localitate,
            furnizorTelefon: row.furnizor_telefon,
           
            clientNume: row.client_nume,
            clientCIF: row.client_cif,
            clientReg: row.client_reg,
            clientAdresa: row.client_adresa,
           clientjudet: row.client_judet,
            facturaid: row.id_receptie,
            facturaNumar: row.numar_int,
            facturaData: row.data_document,
            facturaScadenta: row.data_document, // dacă nu există coloană separată
            facturaMoneda: 'RON',
            facturaTip: 'F',
            facturaCurs: '0.0000',
            facturaTVAIncasare: 'Nu',
            facturaTaxareInversa: 'Nu',
            facturaCotaTVA: row.valoare_tva, // sau poți calcula
            facturaGreutate: '0.000',
            facturaIndexSPV: '',
          },
          produse: [],
          total: row.total,
        };
      }

      grouped[row.id_receptie].produse.push({
       codArticol: row.id_produs,
        denumire: row.denumire,
        cantitate: row.cantitate,
        pret: row.pret_unitar,
        valoare: row.valoare,
        tva: row.valoare_tva,
        pretVanzare: row.pret_vanzare,
        um: row.unitate_masura,
        contGestiune: row.cod_gestiune,
      });
    }

    res.json(Object.values(grouped));
  } catch (err) {
    console.error('Eroare la preluare facturi:', err.message);
    res.status(500).json({ error: 'Eroare la preluarea facturilor' });
  }
});
router.get('/produse-sgr', async (req, res) => {
  const { start, end } = req.query;

  // 1. Preluăm datele firmei cu id_firma = 1
  const [[firma]] = await pool.promise().query(`
    SELECT denumire, cui, cod_inmatriculare, adresa, judet, localitate, tel
    FROM firma
    WHERE id_firma = 1
  `);

  try {
    const [rows] = await pool.promise().query(`
      SELECT 
        DATE(r.date) AS data_document,
        p.id AS id_produs,
        p.name,
        SUM(ri.quantity) AS cantitate,
        p.price AS pret_unitar,
        SUM(ri.quantity * ri.pret) AS valoare,
        p.unit_of_measure

      FROM receipts r
      INNER JOIN receipt_items ri ON ri.receipt_id = r.id
      INNER JOIN products p ON p.id = ri.product_id

      WHERE DATE(r.date) BETWEEN ? AND ?
        AND p.tip_produs = 'garantie_sgr'

      GROUP BY DATE(r.date), p.id
      ORDER BY DATE(r.date), p.id
    `, [start, end]);

    const grouped = {};

    for (const row of rows) {
     const ziua = new Date(row.data_document).toISOString().split('T')[0];
const date = new Date(row.data_document);
const numar = date.getFullYear().toString() +
             (date.getMonth() + 1).toString().padStart(2, '0') +
             date.getDate().toString().padStart(2, '0');

      if (!grouped[ziua]) {
        grouped[ziua] = {
          antet: {
            furnizorNume: firma.denumire,
            furnizorCIF: firma.cui,
            furnizorReg: firma.cod_inmatriculare,
            furnizorAdresa: firma.adresa,
            furnizorJudet: firma.judet,
            furnizorLocalitate: firma.localitate,
            furnizorTelefon: firma.tel,

            clientNume: firma.denumire,
            clientCIF: firma.cui,
            clientReg: firma.cod_inmatriculare,
            clientAdresa: firma.adresa,
            clientjudet: firma.judet,

            facturaid: '', // sau un ID generic per zi
            facturaNumar: numar, // opțional
            facturaData: ziua,
            facturaScadenta: ziua,
            facturaMoneda: 'RON',
            facturaTip: 'B',
            facturaCurs: '0.0000',
            facturaTVAIncasare: 'Nu',
            facturaTaxareInversa: 'Nu',
            facturaCotaTVA: '0.00',
            facturaGreutate: '0.000',
            facturaIndexSPV: '',
          },
          produse: [],
          total: 0,
        };
      }

      grouped[ziua].produse.push({
        codArticol: row.id_produs,
        denumire: row.name,
        cantitate: row.cantitate,
        pret: row.pret_unitar,
        valoare: row.valoare,
        tva: 0,
        pretVanzare: row.pret_unitar,
        um: row.unit_of_measure,
        contGestiune: '461.SGR',
      });

      grouped[ziua].total += Number(row.valoare);
    }

    res.json(Object.values(grouped));
  } catch (err) {
    console.error('Eroare la preluare iesiri:', err.message);
    res.status(500).json({ error: 'Eroare la preluarea iesirilor' });
  }
});


module.exports = router;