<?php

namespace App\Services;

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

class MailService {

    private static function getConfiguredMailer(): PHPMailer
    {
        $config = require __DIR__ . '/../../config/mail.php';

        $mail = new PHPMailer(true);
        $mail->isSMTP();
        $mail->Host = $config['host'];
        $mail->SMTPAuth = true;
        $mail->Username = $config['username'];
        $mail->Password = $config['password'];
        $mail->Port = $config['port'];
        $mail->setFrom($config['from_email'], $config['from_name']);
        $mail->isHTML(true);
        $mail->CharSet = 'UTF-8';

        return $mail;
    }

    public static function sendVerificationEmail($email, $token): void
    {
        try {
            $config = require __DIR__ . '/../../config/mail.php';
            $verificationLink = $config['base_url'] . "/auth/verify-email?token=$token";

            $mail = self::getConfiguredMailer();
            $mail->addAddress($email);
            $mail->Subject = "Verifica tu correo para completar el registro";
            $mail->Body = "
                <p>Hola,</p>
                <p>Gracias por iniciar tu registro en el Sistema de Trámite. Para continuar, por favor haz clic en el siguiente botón:</p>
                <p style='text-align: center;'>
                    <a href='$verificationLink' style='display: inline-block; padding: 10px 20px; background-color: #007bff; color: white; text-decoration: none; border-radius: 5px; font-weight: bold;'>
                    Continuar Registro
                    </a>
                </p>
                <p>Si el botón no funciona, también puedes copiar y pegar este enlace en tu navegador:</p>
                <p><a href='$verificationLink'>$verificationLink</a></p>
                <p>Saludos,<br>Sistema de Trámite</p>";

            $mail->send();
        } catch (Exception $e) {
            error_log("Error al enviar verificación: {$e->getMessage()}");
        }
    }

    public static function sendResponseNotification($email, $processNumber): bool
    {
        try {
            $config = require __DIR__ . '/../../config/mail.php';
            $loginLink = $config['base_url'];

            $mail = self::getConfiguredMailer();
            $mail->addAddress($email);
            $mail->Subject = "Se emitió una respuesta a tu trámite N° $processNumber";
            $mail->Body = "
                <p>Hola,</p>
                <p>Se ha emitido una respuesta a tu trámite <strong>N° $processNumber</strong>.</p>
                <p>Para revisar la respuesta, por favor ingresa a tu cuenta del sistema haciendo clic en el siguiente botón:</p>
                <p style='text-align: center;'>
                    <a href='$loginLink' style='display: inline-block; padding: 10px 20px; background-color: #28a745; color: white; text-decoration: none; border-radius: 5px; font-weight: bold;'>
                    Ingresar al Sistema
                    </a>
                </p>
                <p>Si el botón no funciona, también puedes copiar y pegar este enlace en tu navegador:</p>
                <p><a href='$loginLink'>$loginLink</a></p>
                <p>Saludos,<br>UGEL - Sistema de Trámite Documentario</p>";

            $mail->send();
            return true;
        } catch (Exception $e) {
            error_log("Error al enviar notificación de respuesta: {$e->getMessage()}");
            return false;
        }
    }

    public static function sendResetPasswordEmail($email, $token): bool
    {
        try {
            $config = require __DIR__ . '/../../config/mail.php';
            $resetLink = $config['base_url'] . "/auth/reset-password?token=$token";

            $mail = self::getConfiguredMailer();
            $mail->addAddress($email);
            $mail->Subject = "Recupera tu contraseña";
            $mail->Body = "
                <p>Hola,</p>
                <p>Hemos recibido una solicitud para restablecer tu contraseña. Haz clic en el siguiente botón:</p>
                <p style='text-align: center;'>
                    <a href='$resetLink' style='display: inline-block; padding: 10px 20px; background-color: #dc3545; color: white; text-decoration: none; border-radius: 5px; font-weight: bold;'>
                        Recuperar Contraseña
                    </a>
                </p>
                <p>Si no solicitaste este cambio, puedes ignorar este mensaje.</p>
                <p><a href='$resetLink'>$resetLink</a></p>
                <p>Saludos,<br>UGEL - Sistema de Trámite Documentario</p>";

            $mail->send();
            return true;
        } catch (Exception $e) {
            error_log("Error al enviar correo de recuperación: {$e->getMessage()}");
            return false;
        }
    }
}