<?php

namespace App\Filament\Pages\Auth;

use App\Filament\Support\CheerfulNotification;
use DanHarrin\LivewireRateLimiting\Exceptions\TooManyRequestsException;
use Filament\Actions\Action;
use Filament\Auth\Pages\EmailVerification\EmailVerificationPrompt;
use Filament\Notifications\Notification;
use Filament\Support\Enums\Width;

class EmailVerification extends EmailVerificationPrompt
{
    public function getMaxContentWidth(): Width
    {
        return Width::ExtraLarge;
    }

    public function resendNotificationAction(): Action
    {
        return Action::make('resendNotification')
            ->link()
            ->label(__('filament-panels::auth/pages/email-verification/email-verification-prompt.actions.resend_notification.label').'.')
            ->size('sm')
            ->action(function (): void {
                try {
                    $this->rateLimit(2);
                } catch (TooManyRequestsException $exception) {
                    $this->getRateLimitedNotification($exception)?->send();

                    return;
                }

                $this->sendEmailVerificationNotification($this->getVerifiable());

                CheerfulNotification::success(
                    CheerfulNotification::getByKey('auth.email_verification.resend_success.title'),
                    CheerfulNotification::getByKey('auth.email_verification.resend_success.body')
                )->send();
            });
    }

    protected function getRateLimitedNotification(TooManyRequestsException $exception): ?Notification
    {
        return CheerfulNotification::danger(
            CheerfulNotification::getByKey('auth.email_verification.rate_limited.title'),
            CheerfulNotification::getByKey('auth.email_verification.rate_limited.body', ['seconds' => $exception->secondsUntilAvailable])
        )->send();
    }
}
