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) => {
  const { product_id } = req.query;

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

  try {
      const [results] = await pool.promise().query(`
          SELECT 
              pr.id,
              pr.product_id,
              p1.name AS nume_produs_principal,
              pr.component_id,
              p2.name AS nume_produs_materie_prima,
              pr.quantity,
              pr.unit,
              IFNULL(ts.cantitate_total, 0) AS stoc_actual
          FROM 
              product_recipes pr
          JOIN 
              products p1 ON pr.product_id = p1.id
          JOIN 
              products p2 ON pr.component_id = p2.id
          LEFT JOIN
              temp_stoc_produse ts ON ts.id_produs = pr.component_id
          WHERE pr.product_id = ?
      `, [product_id]);

      res.json(results);
  } catch (err) {
      console.error('Error fetching product recipes:', err);
      res.status(500).send('Internal Server Error');
  }
});

router.get('/produs-finit', async (req, res) => {
  try {
    const [results] = await pool.promise().query(
      `SELECT * FROM products WHERE tip_produs = 'produs_finit'`
    );
    res.json(results);
  } catch (err) {
    console.error('Error fetching finished products:', err);
    res.status(500).send('Internal Server Error');
  }
});
router.get('/materie-prima', async (req, res) => {
  try {
    const [results] = await pool.promise().query(`
      SELECT 
        p.*,
        IFNULL(ts.cantitate_total, 0) AS stoc_actual
      FROM products p
      LEFT JOIN temp_stoc_produse ts ON ts.id_produs = p.id
      WHERE p.tip_produs = 'materie_prima'
    `);
    res.json(results);
  } catch (err) {
    console.error('Error fetching finished products:', err);
    res.status(500).send('Internal Server Error');
  }
});

router.post('/', async (req, res) => {
  const { product_id, component_id, quantity, unit } = req.body;

  if (!product_id || !component_id || !quantity || !unit) {
    return res.status(400).json({ error: 'Toate câmpurile sunt obligatorii' });
  }

  try {
    const [result] = await pool.promise().query(
      `INSERT INTO product_recipes (product_id, component_id, quantity, unit)
       VALUES (?, ?, ?, ?)`,
      [product_id, component_id, quantity, unit]
    );

    res.status(201).json({ message: 'Componentă adăugată cu succes', id: result.insertId });
  } catch (err) {
    console.error('Eroare la inserarea componentei în rețetă:', err);
    res.status(500).json({ error: 'Eroare internă server' });
  }
});
router.put('/:id', async (req, res) => {
  const { id } = req.params;
  const { product_id, component_id, quantity, unit } = req.body;

  if (!product_id || !component_id || !quantity || !unit) {
    return res.status(400).json({ error: 'Toate câmpurile sunt obligatorii' });
  }

  try {
    const [result] = await pool.promise().query(
      `UPDATE product_recipes 
       SET product_id = ?, component_id = ?, quantity = ?, unit = ?
       WHERE id = ?`,
      [product_id, component_id, quantity, unit, id]
    );

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

    res.json({ message: 'Componentă actualizată cu succes' });
  } catch (err) {
    console.error('Eroare la actualizarea componentei în rețetă:', err);
    res.status(500).json({ error: 'Eroare internă server' });
  }
});
router.delete('/:id', async (req, res) => {
  const { id } = req.params;

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

    if (result.affectedRows === 0) {
      return res.status(404).json({ error: 'Componenta nu a fost găsită pentru ștergere' });
    }

    res.json({ message: 'Componentă ștearsă cu succes' });
  } catch (err) {
    console.error('Eroare la ștergerea componentei din rețetă:', err);
    res.status(500).json({ error: 'Eroare internă server' });
  }
});
// endpoint pentru a produce un produs finit
router.post('/produce', async (req, res) => {
  const { prod_name, quantity } = req.body;

  if (!prod_name || !quantity || quantity <= 0) {
    return res.status(400).json({ error: 'Nume produs și cantitate valide sunt necesare' });
  }

  try {
    // Apel procedură
    const [results] = await pool.promise().query(`CALL produce_product(?, ?)`, [prod_name, quantity]);

    // Obține id produs
    const [productResult] = await pool.promise().query(
      `SELECT id FROM products WHERE name = ? AND tip_produs = 'produs_finit' LIMIT 1`,
      [prod_name]
    );

    if (!productResult.length) {
      return res.status(404).json({ error: 'Produsul nu a fost găsit după execuția procedurii' });
    }

    const id_produs = productResult[0].id;

    // Inserează în tabelul de producție
    await pool.promise().query(
      `INSERT INTO productie_produs_finit (id_produs, nume_produs, cantitate)
       VALUES (?, ?, ?)`,
      [id_produs, prod_name, quantity]
    );

    res.status(200).json({ message: 'Producție realizată și salvată cu succes', rezultat: results });
  } catch (err) {
    console.error('Eroare la producție:', err);
    res.status(500).json({ error: err.sqlMessage || 'Eroare internă server' });
  }
});


module.exports = router;