<?php

require_once __DIR__ . '/../helpers/crypto.php';

require_once __DIR__ . '/../libs/phpmailer/src/PHPMailer.php';
require_once __DIR__ . '/../libs/phpmailer/src/SMTP.php';
require_once __DIR__ . '/../libs/phpmailer/src/Exception.php';
require_once __DIR__ . '/../models/configuracionModel.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

function enviarCodigoRecuperacion($email, $codigo) {

    $mail = new PHPMailer(true);

    $configuracionmodel = new configuracionModel();
    $datosConfig = $configuracionmodel->obtenerDatosEnvioMail();

    if (isset($datosConfig['contrasenia_emisor'])) {
        $datosConfig['contrasenia_emisor'] = decryptData($datosConfig['contrasenia_emisor']);
    }

    try {

        // CONFIG SMTP

        $mail->isSMTP();
        $mail->Host = 'smtp.gmail.com';
        $mail->SMTPAuth = true;
        $mail->Username = $datosConfig['email_emisor'];
        $mail->Password = $datosConfig['contrasenia_emisor'];
        $mail->SMTPSecure = 'tls';
        $mail->Port = 587;

        // CODIFICACIÓN (evita problemas con tildes)

        $mail->CharSet = 'UTF-8';

        // REMITENTE

        $mail->setFrom($datosConfig['email_emisor'], 'ByteCenter');

        // DESTINATARIO

        if (empty($email)) {
            return false;
        }

        $mail->addAddress($email);

        $mail->isHTML(true);
        $mail->Subject = 'Recuperación de contraseña';

        $mail->Body = "
            <h3>Recuperación de contraseña</h3>

            <p>Hemos recibido una solicitud para restablecer su contraseña.</p>

            <p>Para continuar con el proceso, utilice el siguiente código de verificación:</p>

            <h2 style='letter-spacing:2px;'>$codigo</h2>

            <p>Este código es válido por un período de 10 minutos.</p>

            <p>Si usted no realizó esta solicitud, puede ignorar este mensaje de forma segura.</p>

            <br>

            <p>Atentamente,<br>
            Equipo de ByteCenter</p>
        ";

        $mail->send();

        return true;

    } catch (Exception $e) {

        // Log interno

        error_log($e->getMessage());

        return false;
    }
}