<?php

namespace App\Notifications;

use App\Services\GuestBuyerAccountService;
use Illuminate\Auth\Notifications\ResetPassword as ResetPasswordNotification;
use Illuminate\Notifications\Messages\MailMessage;

/**
 * Notificación por correo: bienvenida + enlace para crear la primera contraseña.
 *
 * Contexto de uso:
 * - Se envía cuando el comprador era invitado (sin cuenta) y acabamos de crear su usuario
 *   tras un pago completado (ver {@see GuestBuyerAccountService}).
 *
 * Diferencia frente a {@see ResetPassword}:
 * - El texto del correo es de “bienvenida / completaste tu compra”, no el mensaje genérico de
 *   “alguien solicitó restablecer tu contraseña” del flujo “olvidé mi contraseña”.
 *
 * Técnicamente reutiliza la misma ruta y token que Laravel usa para reset (`password.reset`),
 * así el usuario termina en el mismo formulario de nueva contraseña.
 *
 * @todo Si en el futuro se quiere caducidad distinta solo para este correo, habría que valorar
 *       un segundo broker en config/auth.php o tokens con metadata (no trivial).
 */
class WelcomePasswordSetup extends ResetPasswordNotification
{
    /**
     * Construye el mensaje de correo con plantilla Blade propia.
     *
     * El parámetro $url es la URL absoluta al formulario de restablecimiento (incluye token y email).
     *
     * @param  string  $url  URL generada por la clase padre en {@see ResetPasswordNotification::resetUrl()}
     */
    protected function buildMailMessage($url): MailMessage
    {
        // Misma caducidad que el resto de resets (config/auth.php → passwords.users.expire).
        $expireMinutes = (int) config('auth.passwords.'.config('auth.defaults.passwords').'.expire');

        return (new MailMessage)
            ->subject(__('Bienvenido a :app — establece tu contraseña', ['app' => config('app.name')]))
            ->view('emails.auth.welcome-password-setup', [
                'resetUrl' => $url,
                'expireMinutes' => $expireMinutes,
            ]);
    }
}
