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



// Endpoint pentru a adăuga o chitanță în baza unui id_factura
router.post('/', async (req, res) => {
    console.log("Date primite de backend:", req.body);
    try {
        const { facturi, id_firma, id_furnizor, data, valoare_totala } = req.body;

        if (!facturi || facturi.length === 0) {
            return res.status(400).json({ error: "Nu s-au selectat facturi!" });
        }

        // Obținem numărul și seria chitanței
        const [serieResult] = await pool.promise().query(
            "SELECT serie_document, ultimul_numar FROM serii_documente WHERE nume_document = 'Chitanta' FOR UPDATE"
        );

        if (serieResult.length === 0) {
            return res.status(400).json({ error: "Serie document inexistentă!" });
        }

        let { serie_document, ultimul_numar } = serieResult[0];
        let numar_chitanta = ultimul_numar + 1;

        // Inserăm chitanța
        const [chitantaResult] = await pool.promise().query(
            "INSERT INTO chitante (id_firma, id_furnizor, data, valoare, serie_chitanta, numar_chitanta) VALUES (?, ?, ?, ?, ?, ?)",
            [id_firma, id_furnizor, data, valoare_totala, serie_document, numar_chitanta]
        );

        const id_chitanta = chitantaResult.insertId;

        // Legăm fiecare factură de chitanță și actualizăm restul de plată
        for (let { id_factura, suma_incasata } of facturi) {
            await pool.promise().query(
                "INSERT INTO chitante_facturi (id_chitanta, id_factura, suma) VALUES (?, ?, ?)",
                [id_chitanta, id_factura, suma_incasata]
            );

           
        }

        // Incrementăm numărul ultimei chitanțe
        await pool.promise().query(
            "UPDATE serii_documente SET ultimul_numar = ? WHERE nume_document = 'Chitanta'",
            [numar_chitanta]
        );

        res.status(201).json({ 
            message: 'Chitanța a fost generată!', 
            id_chitanta, 
            serie_chitanta: serie_document, 
            numar_chitanta 
        });

    } catch (error) {
        console.error(error);
        res.status(500).json({ error: 'Eroare server!' });
    }
});

router.get('/:id_factura', async (req, res) => {
    try {
        const { id_factura } = req.params;

        // Preia toate chitanțele aferente id_factura
        const [chitante] = await pool.promise().query(
            `SELECT cf.id_factura, cf.suma, c.data, c.serie_chitanta, c.numar_chitanta
            FROM chitante_facturi cf
            JOIN chitante c ON cf.id_chitanta = c.id_chitanta
            WHERE cf.id_factura = ?`,
           [id_factura]
        );

        res.status(200).json({ chitante });
    } catch (error) {
        console.error(error);
        res.status(500).json({ error: 'Eroare server!' });
    }
});
router.get('/numar/serie_chitanta', async (req, res) => {
    try {
        const [serii] = await pool.promise().query(
            `SELECT 
               serie_document, 
               LPAD(ultimul_numar + 1, 4, '0') AS urmatorul_numar 
             FROM serii_documente 
             WHERE nume_document = "Chitanta" 
             LIMIT 1`
          );
          
        console.log("Rezultat SQL:", serii); // ✅ Vezi exact ce returnează MySQL

        if (!serii || serii.length === 0) {
            return res.status(404).json({ error: "Nu s-a găsit seria documentului pentru Chitanța." });
        }

        res.status(200).json({ 
            serie_document: serii[0].serie_document, 
            urmatorul_numar: serii[0].urmatorul_numar 
        });

    } catch (error) {
        console.error("Eroare SQL:", error);
        res.status(500).json({ error: 'Eroare server!' });
    }
});

router.get('/chitanta/:numar_chitanta', async (req, res) => {
    try {
        const { numar_chitanta } = req.params;

        // Obține id_chitanta și valoare pe baza numar_chitanta
        const [chitanta] = await pool.promise().query(
            `SELECT id_chitanta, valoare FROM chitante WHERE numar_chitanta = ?`,
            [numar_chitanta]
        );

        if (chitanta.length === 0) {
            return res.status(404).json({ error: 'Chitanța nu a fost găsită!' });
        }

        const { id_chitanta, valoare } = chitanta[0];

        // Preia toate înregistrările id_factura și suma din chitante_facturi
        const [chitanteFacturi] = await pool.promise().query(
            `SELECT id_factura, suma FROM chitante_facturi WHERE id_chitanta = ?`,
            [id_chitanta]
        );

        if (chitanteFacturi.length === 0) {
            return res.status(404).json({ error: 'Nu există facturi asociate acestei chitanțe!' });
        }

        const idFacturi = chitanteFacturi.map(row => row.id_factura);

        // Preia toate câmpurile necesare din tabelul facturi
        const [facturi] = await pool.promise().query(
            `SELECT id_factura, document_int, numar_int, data_document FROM facturi WHERE id_factura IN (?)`,
            [idFacturi]
        );

        // Crează un map pentru acces rapid la informații
        const facturiMap = new Map(facturi.map(f => [f.id_factura, f]));

        // Construiește rezultatul combinând datele
        const rezultat = chitanteFacturi.map(chitanta => {
            const factura = facturiMap.get(chitanta.id_factura);
            return {
                id_factura: chitanta.id_factura,
                suma: chitanta.suma,
                data_document: factura?.data_document || null,
                document_int: factura?.document_int || null,
                numar_int: factura?.numar_int || null
            };
        });

        // Trimite răspunsul
        res.status(200).json({ valoare, chitante: rezultat });
    } catch (error) {
        console.error(error);
        res.status(500).json({ error: 'Eroare server!' });
    }
});



module.exports = router;