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('/', async (req, res) => {
    try {
        const [results] = await pool.promise().query(`
            SELECT 
                tv.id, 
                tv.id_receptie, 
                tv.id_produs, 
                p.name AS produs_name,
                p.category AS produs_categorie,
                p.barcode AS produs_barcode,
                tv.cantitate, 
                tv.cantitate_consumata, 
                tv.data_expirare
            FROM 
                termen_valabilitate tv
            JOIN 
                products p ON tv.id_produs = p.id
            ORDER BY 
                tv.data_expirare ASC
        `);
        res.json(results);
    } catch (err) {
        console.error('Error fetching termene valabilitate:', err);
        res.status(500).send('Internal Server Error');
    }
});
router.put('/:id', async (req, res) => {
    const { id } = req.params;
    const { id_receptie, id_produs, cantitate, cantitate_consumata, data_expirare } = req.body;

    try {
        const [result] = await pool.promise().query(`
            UPDATE termen_valabilitate
            SET 
                id_receptie = ?, 
                id_produs = ?, 
                cantitate = ?, 
                cantitate_consumata = ?, 
                data_expirare = ?
            WHERE id = ?
        `, [id_receptie, id_produs, cantitate, cantitate_consumata, data_expirare, id]);

        if (result.affectedRows === 0) {
            return res.status(404).json({ message: 'Termen de valabilitate nu a fost găsit' });
        }

        res.json({ message: 'Termen de valabilitate actualizat cu succes' });
    } catch (err) {
        console.error('Eroare la actualizarea termenului de valabilitate:', err);
        res.status(500).send('Eroare internă server');
    }
});
router.post('/', async (req, res) => {
    const { id_receptie, id_produs, cantitate, cantitate_consumata, data_expirare } = req.body;

    try {
        const [result] = await pool.promise().query(`
            INSERT INTO termen_valabilitate (id_receptie, id_produs, cantitate, cantitate_consumata, data_expirare)
            VALUES (?, ?, ?, ?, ?)
        `, [id_receptie, id_produs, cantitate, cantitate_consumata, data_expirare]);

        res.status(201).json({ message: 'Termen de valabilitate adăugat cu succes', id: result.insertId });
    } catch (err) {
        console.error('Eroare la adăugare termen de valabilitate:', err);
        res.status(500).send('Eroare internă server');
    }
});
router.delete('/:id', async (req, res) => {
    const { id } = req.params;

    try {
        const [result] = await pool.promise().query(`
            DELETE FROM termen_valabilitate WHERE id = ?
        `, [id]);

        if (result.affectedRows === 0) {
            return res.status(404).json({ message: 'Termen de valabilitate nu a fost găsit' });
        }

        res.json({ message: 'Termen de valabilitate șters cu succes' });
    } catch (err) {
        console.error('Eroare la ștergere termen de valabilitate:', err);
        res.status(500).send('Eroare internă server');
    }
});
router.get('/produs/:id_produs', async (req, res) => {
    const { id_produs } = req.params;

    try {
        const [results] = await pool.promise().query(`
            SELECT 
                tv.id, 
                tv.id_receptie, 
                tv.id_produs, 
                p.name AS produs_name, 
                p.barcode AS produs_barcode,
                tv.cantitate, 
                tv.cantitate_consumata, 
                tv.data_expirare
            FROM 
                termen_valabilitate tv
            JOIN 
                products p ON tv.id_produs = p.id
            WHERE 
                tv.id_produs = ?
            ORDER BY 
                tv.data_expirare ASC
        `, [id_produs]);

        res.json(results);
    } catch (err) {
        console.error('Error fetching termene valabilitate by id_produs:', err);
        res.status(500).send('Internal Server Error');
    }
});
router.get('/expira-curand', async (req, res) => {
    try {
        const [results] = await pool.promise().query(`
            SELECT 
                tv.id, 
                tv.id_receptie, 
                tv.id_produs, 
                p.name AS produs_name, 
                p.barcode AS produs_barcode,
                tv.cantitate, 
                tv.cantitate_consumata, 
                tv.data_expirare
            FROM 
                termen_valabilitate tv
            JOIN 
                products p ON tv.id_produs = p.id
            WHERE 
                tv.data_expirare BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 DAY)
            ORDER BY 
                tv.data_expirare ASC
        `);
        res.json(results);
    } catch (err) {
        console.error('Error fetching produse care expira curand:', err);
        res.status(500).send('Internal Server Error');
    }
});



module.exports = router;