<?php

declare(strict_types=1);

namespace App\Http\Requests\Pwa;

use Illuminate\Foundation\Http\FormRequest;

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

    public function rules(): array
    {
        return [
            // Acepta email o teléfono como identificador
            'identifier' => ['required', 'string', 'max:255'],
            'password' => ['required', 'string', 'min:6'],
            'device_name' => ['nullable', 'string', 'max:255'],
            'device_id' => ['nullable', 'string', 'max:255'],
        ];
    }

    public function messages(): array
    {
        return [
            'identifier.required' => 'El correo electrónico o teléfono es obligatorio.',
            'password.required' => 'La contraseña es obligatoria.',
            'password.min' => 'La contraseña debe tener al menos 6 caracteres.',
        ];
    }

    /**
     * Determina si el identificador es un email o teléfono.
     */
    public function isEmail(): bool
    {
        return filter_var($this->identifier, FILTER_VALIDATE_EMAIL) !== false;
    }

    /**
     * Obtiene el campo de búsqueda basado en el tipo de identificador.
     */
    public function getSearchField(): string
    {
        return $this->isEmail() ? 'email' : 'phone';
    }

    /**
     * Normaliza el teléfono removiendo caracteres no numéricos.
     */
    public function getNormalizedIdentifier(): string
    {
        if ($this->isEmail()) {
            return strtolower(trim($this->identifier));
        }

        // Para teléfonos, solo mantener dígitos
        return preg_replace('/\D/', '', $this->identifier);
    }
}
