<?php

namespace App\Http\Requests\Auth;

use App\Models\Admin;
use App\Rules\Turnstile;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\ValidationException;

class AdminLoginOtpRequest extends FormRequest
{
    public function authorize(): bool
    {
        return true;
    }

    public function rules(): array
    {
        return [
            'email' => 'required|string|max:120|email',
            'turnstile_token' => ['required', 'string', new Turnstile()],
        ];
    }

    public function messages(): array
    {
        return [
            'email.required' => 'El correo es obligatorio.',
            'email.email' => 'Correo inválido.',
            'turnstile_token.required' => 'Completá la validación de seguridad.',
        ];
    }

    public function getAdmin(): Admin
    {
        $admin = Admin::query()
            ->where('email', $this->string('email')->toString())
            ->with(['persona'])
            ->select('id', 'username', 'email', 'root', 'email_verified_at', 'persona_id', 'estado')
            ->first();

        if (! $admin || ! $admin->estado) {
            throw ValidationException::withMessages([
                'email' => 'No existe un administrador activo con ese correo.',
            ]);
        }

        return $admin;
    }
}
