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

// Importă middleware-ul de autentificare
const authenticateToken = require('../middleware/auth');


// Endpoint pentru a obține produsele - protejează ruta cu middleware-ul de autentificare
router.get('/stoc_produse', async (req, res) => {
    // Query-ul cu JOIN pentru a aduce numele produsului, codul de bare, stoc_total, prețul și id-ul produsului
    let sql = `
        SELECT p.id AS id_produs, p.category, p.name, p.barcode, cantitate_total AS stoc_total, p.price
        FROM temp_stoc_produse sp
        JOIN products p ON sp.id_produs = p.id
        GROUP BY p.id, p.name, p.barcode, p.price
    `;

    try {
        // Executăm query-ul
        
        const [results] = await pool.promise().query(sql);
        res.status(200).json(results);
    } catch (err) {
        console.error('Database error:', err);
        res.status(500).json({ error: 'Database error' });
    }
});
router.post('/inventar/update', async (req, res) => {
    const { id_produs, stoc_faptic } = req.body;
  
    // Verificăm dacă datele au fost trimise corect
    if (!id_produs || stoc_faptic == null) {
      return res.status(400).json({ error: 'id_produs și stoc_faptic sunt necesare' });
    }
  
    // Query pentru a prelua stocul total actual și prețul
    let sqlSelect = `
      SELECT SUM(intrari) AS total_intrari, SUM(iesiri) AS total_iesiri, p.price
      FROM stoc_produse sp
      JOIN products p ON sp.id_produs = p.id
      WHERE sp.id_produs = ?
    `;
  
    // Query pentru a selecta ultimul_numar pentru id_serie = 4
    let sqlSelectUltimulNumar = `
      SELECT ultimul_numar
      FROM serii_documente
      WHERE id_serie = 4
    `;
  
    
  
    
    // Query pentru actualizarea ultimul_numar în serii_documente
    let sqlUpdateUltimulNumar = `
      UPDATE serii_documente
      SET ultimul_numar = ultimul_numar + 1
      WHERE id_serie = 4
    `;
  
    // Query pentru actualizarea stoc_actual
    let sqlUpdateStocActual = `
      UPDATE stoc_produse
      SET stoc_actual = ?
      WHERE id_produs = ?
    `;
  
    try {
      // Selectăm totalul intrărilor, ieșirilor și prețul
      const [results] = await pool.promise().query(sqlSelect, [id_produs]);
      const total_intrari = results[0]?.total_intrari ?? 0;
      const total_iesiri = results[0]?.total_iesiri ?? 0;
      const price = results[0]?.price ?? 0;
      const stoc_total = total_intrari - total_iesiri;
  
      // Calculăm diferența între stoc_faptic și stoc_total
      const diferenta = stoc_faptic - stoc_total;
  
      // Selectăm ultimul_numar din serii_documente pentru id_serie = 4
      const [serieResults] = await pool.promise().query(sqlSelectUltimulNumar);
      const ultimul_numar = serieResults[0]?.ultimul_numar ?? 0;
      const nr_document = ultimul_numar + 1; // Incrementăm pentru noua înregistrare
  
     
      // Actualizăm stoc_actual în stoc_produse cu stoc_faptic
      await pool.promise().query(sqlUpdateStocActual, [stoc_faptic, id_produs]);
  
      // Actualizăm ultimul_numar pentru id_serie = 4
      await pool.promise().query(sqlUpdateUltimulNumar);
  
      res.status(200).json({ message: 'Stoc actualizat cu succes', price });
    } catch (err) {
      console.error('Database error:', err);
      res.status(500).json({ error: 'Eroare de bază de date' });
    }
  });
  router.get('/categorie/stoc_produse', async (req, res) => {
    // Extragem categoria din query params
    const { categorie } = req.query;

    // Construim condiția SQL pentru categorie
    let condition = '';
    let params = [];

    if (categorie === 'faracategorie') {
        // Dacă categoria este "faracategorie", filtrăm produsele cu category NULL sau gol
        condition = 'WHERE p.category IS NULL OR p.category = ""';
    } else if (categorie) {
        // Dacă există o categorie, filtrăm după aceasta
        condition = 'WHERE p.category = ?';
        params.push(categorie);
    }

    // Query-ul SQL care va returna produsele
    const sql = `
        SELECT p.id AS id_produs, p.name, p.barcode, stoc_actual AS stoc_total, p.price
        FROM stoc_produse sp
        JOIN products p ON sp.id_produs = p.id
        ${condition}
        GROUP BY p.id, p.name, p.barcode, p.price
    `;

    try {
        // Executăm query-ul, trecând categoria ca parametru dacă este specificată
        const [results] = await pool.promise().query(sql, params);

        // Răspundem cu produsele găsite
        res.status(200).json(results);
    } catch (err) {
        console.error('Database error:', err);
        res.status(500).json({ error: 'Database error' });
    }
});


router.get('/categorii_produse', async (req, res) => {
  const sql = `
      SELECT DISTINCT
          CASE
              WHEN category IS NULL OR category = '' THEN 'faracategorie'
              ELSE category
          END AS category
      FROM products
      WHERE category IS NOT NULL AND category != ''
  `;

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

// NOILE RUTE pentru stoc istoric
router.get('/la-data', StocController.getStocLaData);
router.get('/evolutie', StocController.getEvolutieStoc);
router.get('/curent', StocController.getStocCurent);




module.exports = router;
