<?php

use Illuminate\Support\Facades\Password;
use Livewire\Attributes\{Validate, Title};
use Livewire\Component;

return new
#[Title('Mot de passe oublié')]
class extends Component {

    #[Validate('required|email')]
    public string $email = '';

    public function sendPasswordResetLink(): void
    {
        $this->validate();

        // 1. Protection contre le spam (Rate Limiting)
        // On limite à 3 demandes toutes les 10 minutes par e-mail + IP
        $throttleKey = Str::lower($this->email).'|'.request()->ip();
        if (RateLimiter::tooManyAttempts($throttleKey, 3)) {
            $seconds = RateLimiter::availableIn($throttleKey);
            $this->addError('email', __('Veuillez patienter : trop de demandes. Réessayez dans ' . ceil($seconds / 60) . ' min.'));
            return;
        }

        $status = Password::sendResetLink(
            $this->only('email')
        );

        if ($status !== Password::RESET_LINK_SENT) {
            RateLimiter::hit($throttleKey, 600); // On marque une tentative

            // 2. Sécurité : On ne révèle pas si l'utilisateur existe ou non
            // On affiche un message générique même en cas d'erreur
            session()->flash('status', __('Un lien de réinitialisation vous a été envoyé si votre adresse e-mail est enregistrée.'));

            return;
        }

        RateLimiter::clear($throttleKey);
        $this->reset('email');
        session()->flash('status', __($status));
    }

    protected function view($data = [])
    {
        return app('view')->file('E:\laragon\www\shop2\storage\framework\views/livewire/views/59095fa0.blade.php', $data);
    }
}; 