<?php

namespace App\Notifications;

use Illuminate\Auth\Notifications\ResetPassword;
use Illuminate\Validation\ValidationException;

class AdminResetPasswordNotification extends ResetPassword
{
    public function toMail($notifiable)
    {
        $url = $this->getNotificationEndpoint($notifiable);

        return (new \Illuminate\Notifications\Messages\MailMessage)
            ->subject('Restablecer contraseña - ' . config('app.name'))
            ->view('mail.admin.reset-password', [
                'url' => $url,
                'notifiable' => $notifiable,
            ]);
    }

    protected function getNotificationEndpoint($notifiable): string
    {
        if (! $endpoint = config('json-api-auth.admin_new_password_form_url')) {
            throw ValidationException::withMessages([
                'message' => 'There is no domain set in config/json-api-auth.php as admin_new_password_form_url.',
            ]);
        }

        return $endpoint . '?token=' . $this->token . '&email=' . urlencode($notifiable->getEmailForPasswordReset());
    }
}
