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');
router.get('/receptii/data', async (req, res) => {
    const { dataStart, dataEnd, numarDocument } = req.query;

    try {
        let sqlQuery;
        let queryParams;

        if (numarDocument) {
            // Caută doar după numărul documentului, ignorând datele
            sqlQuery = `
                SELECT r.*, f.denumire AS furnizor_nume
                FROM receptii r
                LEFT JOIN furnizori f ON r.id_furnizor = f.id_furnizor
                WHERE r.numar_document LIKE ?
                ORDER BY r.data_document ASC
            `;
            queryParams = [`%${numarDocument}%`]; // Folosim LIKE pentru a căuta numărul documentului
        } else if (dataStart && dataEnd) {
            // Caută după intervalul de date
            sqlQuery = `
                SELECT r.*, f.denumire AS furnizor_nume
                FROM receptii r
                LEFT JOIN furnizori f ON r.id_furnizor = f.id_furnizor
                WHERE r.data_document BETWEEN ? AND ? 
                ORDER BY r.data_document ASC
            `;
            queryParams = [dataStart, dataEnd];
        } else {
            // Dacă nu se specifică niciun filtru, returnează o eroare sau un mesaj
            return res.status(400).json({ message: 'Vă rugăm să specificați un interval de date sau un număr de document.' });
        }

        const [receptii] = await pool.promise().query(sqlQuery, queryParams);

        if (receptii.length === 0) {
            return res.status(404).json({ message: 'Nu există recepții care să corespundă criteriilor de căutare.' });
        }

        // Adăugăm produsele pentru fiecare recepție
        const [produse] = await pool.promise().query(
            `SELECT * FROM produse_receptie WHERE id_receptie IN (?)`,
            [receptii.map((receptie) => receptie.id_receptie)]
        );

        // Asociază produsele pentru fiecare recepție
        const receptiiWithProduse = receptii.map(receptie => {
            const produseReceptie = produse.filter(produs => produs.id_receptie === receptie.id_receptie);
            return { ...receptie, produse: produseReceptie };
        });

        res.status(200).json(receptiiWithProduse);
    } catch (err) {
        console.error(err.message);
        res.status(500).json({ error: 'Eroare la preluarea recepțiilor.' });
    }
});

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

    try {
        const [receptie] = await pool.promise().query(
            `SELECT * FROM receptii WHERE id_receptie = ?`,
            [id]
        );

        if (receptie.length === 0) {
            return res.status(404).json({ message: 'Recepția nu a fost găsită.' });
        }

        // Selectăm produsele și adăugăm data_expirare din termen_valabilitate
        const [produse] = await pool.promise().query(
            `SELECT 
                pr.*, 
                p.tva_int,
                tv.data_expirare
             FROM produse_receptie pr
             LEFT JOIN products p ON pr.id_produs = p.id
            LEFT JOIN (
    SELECT id_produs, id_receptie, MAX(data_expirare) as data_expirare
    FROM termen_valabilitate
    GROUP BY id_produs, id_receptie
) tv ON pr.id_produs = tv.id_produs AND pr.id_receptie = tv.id_receptie

             WHERE pr.id_receptie = ?`,
            [id]
        );

        res.status(200).json({ ...receptie[0], produse });
    } catch (err) {
        console.error(err.message);
        res.status(500).json({ error: 'Eroare la preluarea recepției.' });
    }
});

module.exports = router;
