const pool = require('../db/connection');
const transporter = require('../services/mailService');
const crypto = require('crypto');

const login = async (req, res) => {
  const { name_mail_user, user_pass } = req.body;

  try {
    const result = await pool.query('SELECT * from validarusuario($1, $2)', [name_mail_user, user_pass]);
    const { status, rol, user_id,user_name } = result.rows[0];


    let message = '';
    switch (status) {
      case 1:
        message = 'Usuario autenticado correctamente';
        break;
      case 2:
        message = 'Usuario o contraseña incorrectos';
        break;
      default:
        message = 'Error desconocido en la validación';
    }

    res.json({ 
      rol,
      user_id,
      user_name,
      message });
  } catch (error) {
    console.error(error);
    res.status(500).json({ status: 500, message: 'Error interno del servidor' });
  }
};
const createuser = async (req, res) => {
  const { name_user,id_rol, email,user_pass } = req.body;

  try {
    const result = await pool.query('SELECT createuser($1, $2, $3, $4) AS status', [name_user, id_rol, email, user_pass]);

    const status = result.rows[0].status;


    res.json({ 
      message: "Se agrego el usuario correctamente",
      status});
  } catch (error) {
    console.error(error);
    res.status(500).json({ status: 500, message: 'No se pudo agregar al usuario' });
  }
};

const passRecover = async (req, res) => {
  try {
    const {user_mail } = req.body;

    const new_pass = crypto
      .randomBytes(12)
      .toString('base64')
      .slice(0, 12);

    const result = await pool.query(
      'SELECT reppassuser($1,$2) AS status',
      [user_mail, new_pass]
    );

    const status = result.rows[0].status;

    if (status !== 1) {
      return res.json({
        message: 'Correo NO registrado.'
      });
    }

    const mailOptions = {
      from: 'soporte@horuxfin.com',
      to: user_mail,
      subject: `Nueva contraseña`,
      html: `
        <h2>Recuperación de contraseña</h2>
        <p>Se generó una nueva contraseña para el correo <b>${user_mail}</b></p>
        <p><b>Contraseña:</b> ${new_pass}</p>
        <p>Por favor mantenla y borra el correo una vez resguardada.</p>
      `,
    };

    await transporter.sendMail(mailOptions);

    res.json({
      message: 'Correo enviado con nueva contraseña.',
      status
    });

  } catch (error) {
    console.error(error);
    res.status(500).json({
      message: 'No se pudo mandar el correo de recuperación'
    });
  }
};

module.exports = { login,createuser,passRecover};
