const express = require('express');
const router = express.Router();
const moment = require('moment'); // Adăugați moment.js pentru a calcula săptămâna curentă și săptămâna trecută
const pool = require('../db'); 

router.get('/luna', async (req, res) => {
    const sql = `
        SELECT 
            YEAR(data_document) AS an,
            MONTH(data_document) AS luna,
            SUM(val_intrare) AS total_intrari,
            SUM(val_iesire) AS total_iesiri
        FROM 
            raport_gestiune
        GROUP BY 
            YEAR(data_document), MONTH(data_document)
        ORDER BY 
            an, luna;
    `;

    try {
        const [results] = await pool.promise().query(sql);
        res.json(results);
    } catch (err) {
        console.error('Database error:', err);
        res.status(500).json({ error: 'Database error' });
    }
});


router.get('/produse-lunar', async (req, res) => {
    const sql = `
        SELECT 
            YEAR(r.date) AS an,
            MONTH(r.date) AS luna,
            p.name AS produs,
            SUM(ri.quantity) AS total_cantitate
        FROM receipt_items ri
        JOIN products p ON ri.product_id = p.id
        JOIN receipts r ON ri.receipt_id = r.id
        GROUP BY an, luna, p.name
        ORDER BY an DESC, luna DESC, total_cantitate DESC;
    `;

    try {
        const [results] = await pool.promise().query(sql);
        res.json(results);
    } catch (err) {
        console.error('Database error:', err);
        res.status(500).json({ error: 'Database error' });
    }
});
router.get('/produse-saptamanal', async (req, res) => {
    // Calculăm perioada pentru ultimele 7 zile
    const sevenDaysAgo = moment().subtract(7, 'days').format('YYYY-MM-DD');
    const currentDate = moment().format('YYYY-MM-DD');

    // Interogarea SQL pentru produsele vândute în ultimele 7 zile
    const sql = `
        SELECT 
            p.name AS produs,
            SUM(ri.quantity) AS total_cantitate
        FROM receipt_items ri
        JOIN products p ON ri.product_id = p.id
        JOIN receipts r ON ri.receipt_id = r.id
        WHERE DATE(r.date) >= ? AND DATE(r.date) <= ?  -- Filtru pentru ultimele 7 zile, inclusiv azi (data fără ora)
        GROUP BY p.name
        ORDER BY total_cantitate DESC
        LIMIT 10;  -- Limitează rezultatele la primele 10 produse
    `;

    try {
        // Executăm interogarea cu valorile datei pentru ultimele 7 zile
        const [results] = await pool.promise().query(sql, [sevenDaysAgo, currentDate]);
        
        // Răspundem cu datele obținute + data curentă
        res.json({
            data_curenta: currentDate,  // Adăugăm data curentă la răspuns
            produse_vandute: results    // Produsele vândute în ultimele 7 zile
        });
    } catch (err) {
        // Dacă apare o eroare la interogare, o capturăm și returnăm un răspuns de eroare
        console.error('Eroare la baza de date:', err);
        res.status(500).json({ error: 'Eroare la baza de date' });
    }
});
router.get('/produse-saptamanal-slab', async (req, res) => {
    // Calculăm perioada pentru ultimele 7 zile
    const sevenDaysAgo = moment().subtract(7, 'days').format('YYYY-MM-DD');
    const currentDate = moment().format('YYYY-MM-DD');

    // Interogarea SQL pentru produsele vândute în ultimele 7 zile
    const sql = `
        SELECT 
            p.name AS produs,
            SUM(ri.quantity) AS total_cantitate
        FROM receipt_items ri
        JOIN products p ON ri.product_id = p.id
        JOIN receipts r ON ri.receipt_id = r.id
        WHERE DATE(r.date) >= ? AND DATE(r.date) <= ?  -- Filtru pentru ultimele 7 zile, inclusiv azi (data fără ora)
        GROUP BY p.name
        ORDER BY total_cantitate ASC
        LIMIT 10;  -- Limitează rezultatele la primele 10 produse
    `;

    try {
        // Executăm interogarea cu valorile datei pentru ultimele 7 zile
        const [results] = await pool.promise().query(sql, [sevenDaysAgo, currentDate]);
        
        // Răspundem cu datele obținute + data curentă
        res.json({
            data_curenta: currentDate,  // Adăugăm data curentă la răspuns
            produse_vandute: results    // Produsele vândute în ultimele 7 zile
        });
    } catch (err) {
        // Dacă apare o eroare la interogare, o capturăm și returnăm un răspuns de eroare
        console.error('Eroare la baza de date:', err);
        res.status(500).json({ error: 'Eroare la baza de date' });
    }
});
router.get('/produse-lunar-slab', async (req, res) => {
    const sql = `
        SELECT 
            YEAR(r.date) AS an,
            MONTH(r.date) AS luna,
            p.name AS produs,
            SUM(ri.quantity) AS total_cantitate
        FROM receipt_items ri
        JOIN products p ON ri.product_id = p.id
        JOIN receipts r ON ri.receipt_id = r.id
        GROUP BY an, luna, p.name
        ORDER BY an ASC, luna ASC, total_cantitate ASC;
    `;

    try {
        const [results] = await pool.promise().query(sql);
        res.json(results);
    } catch (err) {
        console.error('Database error:', err);
        res.status(500).json({ error: 'Database error' });
    }
});


router.get('/produse-azi', async (req, res) => {
    // Obținem data curentă
    const today = moment().format('YYYY-MM-DD'); // Formatăm data într-un format acceptat de SQL (ex: 2025-01-29)

    const sql = `
        SELECT 
            p.name AS produs,  -- Numele produsului
            p.price AS pret,  -- Prețul produsului
            SUM(ri.quantity) AS total_cantitate,  -- Suma cantităților vândute
            SUM(ri.quantity * p.price) AS total_valoare  -- Calculăm valoarea totală
        FROM receipt_items ri
        JOIN products p ON ri.product_id = p.id
        JOIN receipts r ON ri.receipt_id = r.id
        WHERE DATE(r.date) = ?  -- Filtru pentru ziua curentă
        GROUP BY p.name, p.price  -- Grupăm după numele și prețul produsului
        ORDER BY total_cantitate DESC;  -- Sortăm produsele în ordine descrescătoare după cantitatea vândută
    `;

    try {
        const [results] = await pool.promise().query(sql, [today]);
        res.json(results);  // Returnăm rezultatele
    } catch (err) {
        console.error('Database error:', err);
        res.status(500).json({ error: 'Database error' });
    }
});
router.get('/produse-7-zile', async (req, res) => {
    // Calculăm data de început (acum 7 zile)
    const sevenDaysAgo = moment().subtract(7, 'days').format('YYYY-MM-DD');
    const today = moment().format('YYYY-MM-DD');

    const sql = `
        SELECT 
            p.name AS produs,  -- Numele produsului
            p.price AS pret,  -- Prețul produsului
            SUM(ri.quantity) AS total_cantitate,  -- Suma cantităților vândute
            SUM(ri.quantity * p.price) AS total_valoare  -- Calculăm valoarea totală
        FROM receipt_items ri
        JOIN products p ON ri.product_id = p.id
        JOIN receipts r ON ri.receipt_id = r.id
        WHERE DATE(r.date) BETWEEN ? AND ?  -- Filtru pentru ultimele 7 zile
        GROUP BY p.name, p.price  -- Grupăm după numele și prețul produsului
        ORDER BY total_cantitate DESC;  -- Sortăm produsele în ordine descrescătoare după cantitatea vândută
    `;

    try {
        const [results] = await pool.promise().query(sql, [sevenDaysAgo, today]);
        res.json(results);  // Returnăm rezultatele
    } catch (err) {
        console.error('Database error:', err);
        res.status(500).json({ error: 'Database error' });
    }
});
router.get('/produse-ieri', async (req, res) => {
    // Calculăm data de început (acum 7 zile)
    const sevenDaysAgo = moment().subtract(1, 'days').format('YYYY-MM-DD');
    const today = moment().format('YYYY-MM-DD');

    const sql = `
        SELECT 
            p.name AS produs,  -- Numele produsului
            p.price AS pret,  -- Prețul produsului
            SUM(ri.quantity) AS total_cantitate,  -- Suma cantităților vândute
            SUM(ri.quantity * p.price) AS total_valoare  -- Calculăm valoarea totală
        FROM receipt_items ri
        JOIN products p ON ri.product_id = p.id
        JOIN receipts r ON ri.receipt_id = r.id
        WHERE DATE(r.date) BETWEEN ? AND ?  -- Filtru pentru ultimele 7 zile
        GROUP BY p.name, p.price  -- Grupăm după numele și prețul produsului
        ORDER BY total_cantitate DESC;  -- Sortăm produsele în ordine descrescătoare după cantitatea vândută
    `;

    try {
        const [results] = await pool.promise().query(sql, [sevenDaysAgo, today]);
        res.json(results);  // Returnăm rezultatele
    } catch (err) {
        console.error('Database error:', err);
        res.status(500).json({ error: 'Database error' });
    }
});

module.exports = router;