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('/:id_produs', async (req, res) => {
    try {
        const { id_produs } = req.params;

        // Preia toate înregistrările din receipt_items care au product_id = id_produs
        const [receiptItems] = await pool.promise().query(
            `SELECT ri.receipt_id, ri.product_id
            FROM receipt_items ri
            WHERE ri.product_id = ?`,
            [id_produs]
        );

        if (receiptItems.length === 0) {
            return res.status(404).json({ message: 'Nicio înregistrare găsită pentru acest produs.' });
        }

        // Obține toate receipt_id din rezultatul anterior
        const receiptIds = receiptItems.map(item => item.receipt_id);

      const [receipts] = await pool.promise().query(
    `SELECT DISTINCT r.id AS receipt_id, r.date, r.nr_bon, ri.quantity
    FROM receipts r
    JOIN receipt_items ri ON r.id = ri.receipt_id
    WHERE r.id IN (?)`,
    [receiptIds]
);


        res.status(200).json({ receipts });
    } catch (error) {
        console.error(error);
        res.status(500).json({ error: 'Eroare server!' });
    }
});
router.get('/intrare/:id_produs', async (req, res) => {
    try {
        const { id_produs } = req.params;

        // 1. Recepțiile pentru produsul dat
        const [receipts] = await pool.promise().query(
            `SELECT 
                pr.id_produs, 
                pr.denumire, 
                pr.cantitate, 
                r.id_receptie,
                r.numar_int, 
                r.document_int,
                r.id_furnizor, 
                f.denumire AS nume_furnizor, 
                r.data_document, 
                r.numar_document 
            FROM produse_receptie pr
            JOIN receptii r ON pr.id_receptie = r.id_receptie
            JOIN furnizori f ON r.id_furnizor = f.id_furnizor
            WHERE pr.id_produs = ?`,
            [id_produs]
        );

        // 2. Înregistrări din productie_produs_finit
        const [productii] = await pool.promise().query(
            `SELECT 
                id, 
                id_produs, 
                cantitate, 
                data_productie 
            FROM productie_produs_finit 
            WHERE id_produs = ?`,
            [id_produs]
        );

        // 3. Dacă nu există nici recepții, nici producții, trimite 404
        if (receipts.length === 0 && productii.length === 0) {
            return res.status(404).json({ message: 'Nu există date pentru acest produs.' });
        }

        // 4. Returnează ce a găsit (unul sau ambele seturi)
        res.status(200).json({ 
            receptii: receipts,
            productii: productii 
        });
    } catch (error) {
        console.error(error);
        res.status(500).json({ error: 'Eroare server!' });
    }
});

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

        // 1. Bonuri de consum
        const [bonuri] = await pool.promise().query(
            `SELECT 
                pr.product_id,
                pr.quantity, 
                pr.receipt_id, 
                f.name AS nume_produs,
                r.nr_bon,
                r.date, 
                r.id
            FROM receipt_items pr
            JOIN receipts r ON pr.receipt_id = r.id
            JOIN products f ON pr.product_id = f.id
            WHERE pr.product_id = ?`,
            [id_produs]
        );

        // 2. Facturi (vânzări)
        const [facturi] = await pool.promise().query(
            `SELECT 
                fp.id_factura,
                fp.id_produs,
                fp.cantitate,
                f.data_receptie AS date,
                f.document_int,
                f.numar_int,
                c.denumire AS client,
                p.name AS nume_produs
            FROM facturi_produse fp
            JOIN facturi f ON fp.id_factura = f.id_factura
            JOIN furnizori c ON f.id_furnizor = c.id_furnizor
            JOIN products p ON fp.id_produs = p.id
            WHERE fp.id_produs = ?`,
            [id_produs]
        );

        // 3. Consumul în producție (materii prime)
        const [consumuri] = await pool.promise().query(
            `SELECT 
                componenta_id AS id_produs,
                cantitate_consumata AS cantitate,
                data_productiei AS date,
                pf.id,
                p.name AS nume_produs
            FROM productie pf
            JOIN products p ON pf.componenta_id = p.id
            WHERE pf.componenta_id = ?`,
            [id_produs]
        );

        // 4. Dacă nu există deloc ieșiri
        if (bonuri.length === 0 && facturi.length === 0 && consumuri.length === 0) {
            return res.status(404).json({ message: 'Nu există ieșiri pentru acest produs.' });
        }

        // 5. Returnăm toate ieșirile
        res.status(200).json({
            bonuri,
            facturi,
            consumuri
        });
    } catch (error) {
        console.error(error);
        res.status(500).json({ error: 'Eroare server!' });
    }
});



module.exports = router;