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');

// Endpoint pentru a obține produsele - protejează ruta cu middleware-ul de autentificare
router.post('/', async (req, res) => {
    let { denumire, cui, codInmatriculare, judet, adresa, tel, tva, contBancar } = req.body;
    const tvaInt = isNaN(parseInt(tva, 10)) ? 0 : parseInt(tva, 10);
  
    // Normalizează CUI-ul (elimină prefixul RO dacă există)
    const normalizedCui = cui.replace(/^RO/i, '');
  
    try {
      // Verifică dacă există un furnizor cu același CUI (cu sau fără RO)
      const [rows] = await pool.promise().query(
        `SELECT * FROM furnizori WHERE REPLACE(UPPER(cui), 'RO', '') = ?`,
        [normalizedCui]
      );
  
      if (rows.length > 0) {
        return res.status(409).send('Furnizorul există deja');
      }
  
      // Dacă TVA este 1 și CUI nu are deja prefixul "RO", adaugă-l
      if (tvaInt === 1 && !cui.startsWith('RO')) {
        cui = `RO${normalizedCui}`;
      } else {
        cui = normalizedCui;
      }
  
      const sql = `INSERT INTO furnizori 
        (denumire, cui, cod_inmatriculare, judet, adresa, tel, tva, cont_bancar) 
        VALUES (?, ?, ?, ?, ?, ?, ?, ?)`;
  
      await pool.promise().query(sql, [denumire, cui, codInmatriculare, judet, adresa, tel, tvaInt, contBancar]);
  
      res.status(200).send('Furnizor adăugat cu succes');
    } catch (err) {
      console.error(err);
      res.status(500).send('Eroare la adăugare furnizor');
    }
  });
  

router.get('/select_furnizori', async (req, res) => {
    const sql = 'SELECT * FROM furnizori';

    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('/select_furnizor/:id_furnizor', async (req, res) => {
    const { id_furnizor } = req.params;  // Preia id_furnizor din parametrii rutei

    if (!id_furnizor) {
        return res.status(400).json({ error: 'ID Furnizor is required' });
    }

    const sql = 'SELECT * FROM furnizori WHERE id_furnizor = ?';

    try {
        const [results] = await pool.promise().query(sql, [id_furnizor]);
        if (results.length === 0) {
            return res.status(404).json({ error: 'Furnizor not found' });
        }
        res.json(results[0]);  // Returnează doar un singur obiect, nu un array
    } catch (err) {
        console.error('Database error:', err);
        res.status(500).json({ error: 'Database error' });
    }
});
router.get('/select_furnizor_cui/:cui', async (req, res) => {
    let { cui } = req.params;

    if (!cui) {
        return res.status(400).json({ error: 'CUI is required' });
    }

    // Elimină "RO" doar din parametru, fără a afecta rezultatul returnat
    const cuiNumeric = cui.replace(/^RO/, "");

    const sql = 'SELECT * FROM furnizori WHERE REPLACE(cui, "RO", "") = ?';

    try {
        const [results] = await pool.promise().query(sql, [cuiNumeric]);
        if (results.length === 0) {
            return res.status(404).json({ error: 'Furnizor not found' });
        }

        res.json(results[0]); // Returnează rezultatul exact cum este în baza de date
    } catch (err) {
        console.error('Database error:', err);
        res.status(500).json({ error: 'Database error' });
    }
});
router.get('/select_furnizori/sold', async (req, res) => {
    const sql = `
        SELECT DISTINCT f.*
        FROM furnizori f
        JOIN receptii r ON f.id_furnizor = r.id_furnizor
        WHERE r.rest_plata > 0
    `;

    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' });
    }
});

module.exports = router;
