const db = require('../config/db');
const md5 = require('md5');
const jwt = require('jsonwebtoken');

const login = async (req, res) => {
    try {
        const { usuario, contrasena } = req.body;

        if (!usuario || !contrasena) {
            return res.json("0"); // Maintain legacy error response
        }

        const hashedPassword = md5(contrasena);

        // Parametrized query to prevent SQL Injection
        const [rows] = await db.query(
            "SELECT id_transportista, nombre, id_proveedor, dni FROM m_proveedores_trasportistas WHERE desactivado = 0 AND dni = ? AND password = ?",
            [usuario, hashedPassword]
        );

        const fecha = new Date().toISOString().slice(0, 19).replace('T', ' '); // Format: YYYY-MM-DD HH:mm:ss

        if (rows.length > 0) {
            const user = rows[0];
            
            // Log successful attempt
            await db.query(
                "INSERT INTO c_log_app (usuario, fecha, acceso) VALUES (?, ?, ?)",
                [usuario, fecha, 1]
            );

            // Legacy format response: array with [dni, id_proveedor]
            // const response = [user.dni, user.id_proveedor];
            
            // Modern JWT response
            const token = jwt.sign(
                { 
                    id: user.id_transportista, 
                    dni: user.dni,
                    id_proveedor: user.id_proveedor 
                }, 
                process.env.JWT_SECRET,
                { expiresIn: '365d' } // Long expiration for app usability
            );

            return res.json({
                success: true,
                token: token,
                user: {
                    dni: user.dni,
                    id_proveedor: user.id_proveedor,
                    nombre: user.nombre
                }
            });
        } else {
            // Log failed attempt
            await db.query(
                "INSERT INTO c_log_app (usuario, fecha, acceso) VALUES (?, ?, ?)",
                [usuario, fecha, 0]
            );

            return res.json("0");
        }
    } catch (error) {
        console.error("Login error:", error);
        return res.status(500).json("0"); // Fallback to "0" on error to not crash client
    }
};

module.exports = {
    login
};
