
const Area = require('../models/area');
const Cargo = require('../models/cargo');
const { Op } = require("sequelize");
const Usuario = require('../models/usuario');
var nodemailer = require('nodemailer');
const Usuario_Rol = require('../models/usuario_rol');
const Historial_Empresa = require('../models/historial_empresa');
var transporter = nodemailer.createTransport({
    secure: false,
    pool: true,
    host: '50.31.176.182',
    port: 587,
    auth: {
        user: 'notificaciones@pcacompany.com.ec',
        pass: '%2290316882001@'
    },
    tls: {
        rejectUnauthorized: false
    }
});

function plantillaCorreo(titulo, contenido, textoBoton, urlBoton) {
    return `
    <div style="font-family: 'Segoe UI', Arial, sans-serif; max-width: 600px; margin: 0 auto; background-color: #f8f9fa;">
      <!-- Header con logo -->
      <div style="background-color: #1B3C6E; padding: 20px 30px; text-align: center; border-radius: 8px 8px 0 0;">
        <div style="background-color: #ffffff; display: inline-block; padding: 8px 16px; border-radius: 6px; margin-bottom: 8px;">
          <img src="https://pcasyncconnect.pcacompany.com.ec/assets/logos/logo1.jpg" alt="Company PCA" style="max-height: 40px;" />
        </div>
        <p style="color: rgba(255,255,255,0.85); margin: 0; font-size: 12px; letter-spacing: 1px;">TALENTO HUMANO</p>
      </div>

      <!-- Contenido -->
      <div style="background-color: #ffffff; padding: 30px; border-left: 1px solid #e9ecef; border-right: 1px solid #e9ecef;">
        <h2 style="color: #1B3C6E; margin: 0 0 16px; font-size: 20px; font-weight: 600;">${titulo}</h2>
        <div style="color: #555; font-size: 14px; line-height: 1.6;">
          ${contenido}
        </div>
        ${textoBoton ? `
        <div style="text-align: center; margin-top: 24px;">
          <a href="${urlBoton}"
            style="display: inline-block; background-color: #1B3C6E; color: white; padding: 12px 28px; text-decoration: none; border-radius: 6px; font-weight: 600; font-size: 14px;">
            ${textoBoton}
          </a>
        </div>
        ` : ''}
      </div>

      <!-- Footer -->
      <div style="background-color: #1B3C6E; padding: 16px 30px; text-align: center; border-radius: 0 0 8px 8px;">
        <p style="color: rgba(255,255,255,0.7); font-size: 11px; margin: 0;">Este es un correo automático del sistema de Talento Humano.</p>
        <p style="color: rgba(255,255,255,0.7); font-size: 11px; margin: 4px 0 0;">Company PCA -Talento Humano &copy; ${new Date().getFullYear()}</p>
      </div>
    </div>`;
}

async function enviarCodigoRecuperarContrasenia(req, res) {
    try {

        console.log("----------------correo",req.body.CORREO)  

        let usuarioEncontrado = await Usuario.findOne({ 
            where: { 
                ESTADO: 1,
                [Op.or]: [
                    { CORREO: req.body.CORREO },
                    { CORREO_EMPRESARIAL: req.body.CORREO }
                ]
            } 
        });
        if (usuarioEncontrado) {

            const destinatarios = usuarioEncontrado.CORREO_EMPRESARIAL
            ? (usuarioEncontrado.CORREO + ',' + usuarioEncontrado.CORREO_EMPRESARIAL)
            : usuarioEncontrado.CORREO;
            var mailOptions = {
                from: 'notificaciones@pcacompany.com.ec',
                to: destinatarios,
                subject: 'RECUPERAR CONTRASEÑA - PCA',
                html: plantillaCorreo(
                    'Recuperar Contraseña',
                    `<p>Estimado/a <strong>${usuarioEncontrado.NOMBRES}</strong>,</p>
                    <p>Has solicitado recuperar tu contraseña. Utiliza el siguiente código de seguridad:</p>
                    <div style="background-color: #f8f9fa; border: 2px solid #1B3C6E; padding: 20px; margin: 16px 0; border-radius: 8px; text-align: center;">
                      <p style="margin: 0; font-size: 32px; font-weight: 700; color: #1B3C6E; letter-spacing: 4px;">${req.body.CODIGO}</p>
                    </div>
                    <p style="font-size: 12px; color: #999;">Si no solicitaste este código, ignora este correo.</p>`,
                    null, null
                )
            };


            transporter.sendMail(mailOptions, function (error) {
                if (error) {
                    console.log(error);
                    res.status(402).send({
                        message: "Al parecer existe un error al enviar el correo, inténtelo nuevamente" + error
                    });
                } else {
                    res.status(200).send({
                        message: "El código ha sido enviado a su correo electrónico por favor verifíquelo", data: usuarioEncontrado
                    });
                }
            });


        } else {
            res.status(402).send({ message: 'El usuario no existe' });
        }

    } catch (e) {
        console.log(e)
        res.status(500).send({
            message: e.name
        });
    }

}


async function enviarNotificacionSolicitudPermisoJefe(req, res) {
    try {


        let usuariosEncontrados = await Usuario.findAll({
            include: [
                {
                    model: Historial_Empresa,
                    as: 'HISTORIAL_EMPRESA',
                    required: true,
                    where: { ESTADO: true },
                    include: [
                        {
                            model: Cargo,
                            required: true,
                            include: [
                                {
                                    model: Area,
                                    required: true,
                                    where: { ID_AREA: req.params.id }
                                }
                            ]
                        }
                    ]
                },
                {
                    model: Usuario_Rol,
                    as: 'USUARIO_ROL',
                    where: { ID_ROL: 3 } // Filtro por rol
                }
            ]
        });

        if (usuariosEncontrados && usuariosEncontrados.length > 0) {
            console.log("Usuarios encontrados:", usuariosEncontrados.length);
            let enviados = 0;

            for (let usuario of usuariosEncontrados) {
                const correo = usuario.CORREO_EMPRESARIAL || usuario.CORREO;
                if (!correo) {
                    console.warn(`Usuario ${usuario.ID_USUARIO} (${usuario.NOMBRES}) no tiene correo configurado, se omite.`);
                    continue;
                }

                console.log("Enviando correo a:", correo);

                var mailOptions = {
                    from: 'notificaciones@pcacompany.com.ec',
                    to: correo,
                    subject: 'NUEVA SOLICITUD DE PERMISO - PCA',
                    html: plantillaCorreo(
                        'Nueva Solicitud de Permiso',
                        `<p>Estimado/a <strong>${usuario.NOMBRES}</strong>,</p>
                        <p>Se ha registrado una nueva solicitud de permiso en su área que requiere su revisión y aprobación.</p>
                        <div style="background-color: #fff3cd; border-left: 4px solid #ffc107; padding: 12px 16px; margin: 16px 0; border-radius: 4px;">
                          <p style="margin: 0; font-size: 13px; color: #856404;"><strong>Acción requerida:</strong> Revisar y aprobar o rechazar la solicitud de permiso.</p>
                        </div>`,
                        'Ver solicitudes pendientes',
                        'https://pcasyncconnect.pcacompany.com.ec/asistencia-jefe/solicitud-permisos-jefe'
                    )
                };

                try {
                    await transporter.sendMail(mailOptions);
                    console.log(`Correo enviado exitosamente a: ${correo}`);
                    enviados++;
                } catch (error) {
                    console.error(`Error al enviar el correo a ${correo}:`, error);
                }
            }

            res.status(200).send({
                message: `Correos enviados a ${enviados} usuario(s).`
            });
        } else {
            res.status(404).send({ message: 'No se encontraron usuarios con los filtros especificados.' });
        }


    } catch (e) {
        console.log(e)
        res.status(500).send({
            message: e.name
        });
    }

}

async function enviarNotificacionSolicitudPermisoTTHH(req, res) {
    try {


        let usuariosEncontrados = await Usuario.findAll({
            include: [
                {
                    model: Usuario_Rol,
                    as: 'USUARIO_ROL',
                    where: { ID_ROL: 1 }
                }
            ]
        });

        if (usuariosEncontrados && usuariosEncontrados.length > 0) {
            console.log("Usuarios encontrados:", usuariosEncontrados.length);
            let enviados = 0;

            for (let usuario of usuariosEncontrados) {
                const correo = usuario.CORREO_EMPRESARIAL || usuario.CORREO;
                if (!correo) {
                    console.warn(`Usuario ${usuario.ID_USUARIO} (${usuario.NOMBRES}) no tiene correo configurado, se omite.`);
                    continue;
                }

                console.log("Enviando correo a:", correo);

                var mailOptions = {
                    from: 'notificaciones@pcacompany.com.ec',
                    to: correo,
                    subject: 'EVIDENCIA DE PERMISO SUBIDA - PCA',
                    html: plantillaCorreo(
                        'Evidencia de Permiso Subida',
                        `<p>Estimado/a <strong>${usuario.NOMBRES}</strong>,</p>
                        <p>Un empleado ha subido la evidencia de su permiso y está pendiente de su revisión.</p>
                        <div style="background-color: #d1ecf1; border-left: 4px solid #17a2b8; padding: 12px 16px; margin: 16px 0; border-radius: 4px;">
                          <p style="margin: 0; font-size: 13px; color: #0c5460;"><strong>Acción requerida:</strong> Ingrese a la plataforma para revisar el archivo adjunto de evidencia y dar el visto bueno o rechazar el permiso.</p>
                        </div>`,
                        'Revisar evidencias pendientes',
                        'https://pcasyncconnect.pcacompany.com.ec/asistencia-tthh/solicitud-permisos-tthh'
                    )
                };

                try {
                    await transporter.sendMail(mailOptions);
                    console.log(`Correo enviado exitosamente a: ${correo}`);
                    enviados++;
                } catch (error) {
                    console.error(`Error al enviar el correo a ${correo}:`, error);
                }
            }

            res.status(200).send({
                message: `Correos enviados a ${enviados} usuario(s).`
            });
        } else {
            res.status(404).send({ message: 'No se encontraron usuarios con los filtros especificados.' });
        }


    } catch (e) {
        console.log(e)
        res.status(500).send({
            message: e.name
        });
    }

}

async function enviarNotificacionSolicitudPermisoUsuario(req, res) {
    try {

        let usuarioEncontrado = await Usuario.findOne({ where: { ID_USUARIO: req.params.id } });
        if (usuarioEncontrado) {
            const correo = usuarioEncontrado.CORREO_EMPRESARIAL || usuarioEncontrado.CORREO;
            if (!correo) {
                console.warn(`Usuario ${usuarioEncontrado.ID_USUARIO} no tiene correo configurado.`);
                return res.status(200).send({ message: 'Usuario sin correo configurado, no se envió notificación.' });
            }

            console.log("Enviando correo a:", correo);
            var mailOptions = {
                from: 'notificaciones@pcacompany.com.ec',
                to: correo,
                subject: 'ACTUALIZACIÓN DE TU PERMISO - PCA',
                html: plantillaCorreo(
                    'Actualización de tu Permiso',
                    `<p>Estimado/a <strong>${usuarioEncontrado.NOMBRES} ${usuarioEncontrado.APELLIDOS}</strong>,</p>
                    <p>Tu solicitud de permiso ha sido revisada. Ingresa a la plataforma para ver el estado actualizado de tu solicitud.</p>
                    <div style="background-color: #e8f5e9; border-left: 4px solid #4caf50; padding: 12px 16px; margin: 16px 0; border-radius: 4px;">
                      <p style="margin: 0; font-size: 13px; color: #2e7d32;"><strong>Nota:</strong> Revisa el estado de tu permiso y, si fue aprobado por tu jefe, recuerda subir la evidencia correspondiente.</p>
                    </div>`,
                    'Ver mis permisos',
                    'https://pcasyncconnect.pcacompany.com.ec/asistencia/permisos'
                )
            };

            try {
                await transporter.sendMail(mailOptions);
                console.log(`Correo enviado exitosamente a: ${correo}`);
            } catch (error) {
                console.error(`Error al enviar el correo a ${correo}:`, error);
            }

            res.status(200).send({
                message: `Correo enviado exitosamente.`
            });
        } else {
            res.status(402).send({ message: 'El usuario no existe' });
        }

    } catch (e) {
        console.log(e)
        res.status(500).send({
            message: e.name
        });
    }

}


module.exports = {

    enviarCodigoRecuperarContrasenia,
    enviarNotificacionSolicitudPermisoJefe,
    enviarNotificacionSolicitudPermisoUsuario,
    enviarNotificacionSolicitudPermisoTTHH

};