// controllers/StocController.js
const StocService = require('../services/StocService');

class StocController {
    /**
     * GET /api/stoc/la-data
     * Returnează stocul la o dată specificată
     */
    async getStocLaData(req, res) {
        try {
            const { data, gestiune_id } = req.query;
            
            if (!data) {
                return res.status(400).json({ 
                    error: 'Parametrul data este obligatoriu (format: YYYY-MM-DD)' 
                });
            }

            // Validare format data
            const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
            if (!dateRegex.test(data)) {
                return res.status(400).json({ 
                    error: 'Format data invalid. Folosește YYYY-MM-DD' 
                });
            }

            const stocData = await StocService.getStocLaData(data, gestiune_id);
            
            res.json({
                success: true,
                data: data,
                gestiune_id: gestiune_id || 'toate',
                total_produse: stocData.length,
                stoc: stocData
            });
            
        } catch (error) {
            console.error('Eroare getStocLaData:', error);
            res.status(500).json({ 
                error: 'Eroare la calcularea stocului',
                details: process.env.NODE_ENV === 'development' ? error.message : undefined
            });
        }
    }

    /**
     * GET /api/stoc/evolutie
     * Returnează evoluția stocului pentru un produs
     */
    async getEvolutieStoc(req, res) {
        try {
            const { id_produs, data_start, data_end, gestiune_id } = req.query;
            
            if (!id_produs || !data_start || !data_end) {
                return res.status(400).json({ 
                    error: 'Parametri necesari: id_produs, data_start, data_end' 
                });
            }

            const evolutie = await StocService.getEvolutieStoc(
                id_produs, 
                data_start, 
                data_end, 
                gestiune_id
            );
            
            res.json({
                success: true,
                id_produs,
                data_start,
                data_end,
                evolutie: evolutie
            });
            
        } catch (error) {
            console.error('Eroare getEvolutieStoc:', error);
            res.status(500).json({ 
                error: 'Eroare la obținerea evoluției stocului'
            });
        }
    }

    /**
     * GET /api/stoc/curent
     * Returnează stocul curent
     */
    async getStocCurent(req, res) {
        try {
            const { gestiune_id } = req.query;
            const stocCurent = await StocService.getStocCurent(gestiune_id);
            
            res.json({
                success: true,
                gestiune_id: gestiune_id || 'toate',
                total_produse: stocCurent.length,
                stoc: stocCurent
            });
            
        } catch (error) {
            console.error('Eroare getStocCurent:', error);
            res.status(500).json({ 
                error: 'Eroare la obținerea stocului curent'
            });
        }
    }
}

module.exports = new StocController();