<?php

declare(strict_types=1);

namespace App\Http\Requests\Auth;

use App\Http\Requests\Auth\Concerns\HasPasswordRules;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

/**
 * Валидация POST /api/auth/register.
 *
 * По ТЗ §1.5/§4.1: 2 обязательных click-wrap'а — оферта + согласие на ПДн
 * (3-й «маркетинговый» из handoff НЕ требуется — расхождение #2 реестра v1.13).
 */
class RegisterRequest extends FormRequest
{
    use HasPasswordRules;

    /**
     * @return array<string, mixed>
     *
     * NB: уникальность email НЕ через DB-rule — её решает RegistrationService
     * (активный email → 422 email_taken; неподтверждённый → перевыпуск кода).
     * Капча проверяется на КАЖДОМ register-запросе (это независимый публичный POST).
     */
    public function rules(): array
    {
        return [
            'email' => ['required', 'string', 'email', 'max:255'],
            'password' => $this->passwordRules(),
            'accept_offer' => ['required', 'accepted'],
            'accept_pdn' => ['required', 'accepted'],
            'captcha_token' => ['required', 'string'],
        ];
    }

    /** @return array<string, string> */
    public function messages(): array
    {
        return array_merge($this->passwordMessages(), [
            'email.required' => 'Укажите email.',
            'email.email' => 'Email указан некорректно.',
            'accept_offer.accepted' => 'Необходимо принять оферту.',
            'accept_pdn.accepted' => 'Необходимо согласие на обработку персональных данных.',
            'captcha_token.required' => 'Подтвердите, что вы не робот.',
        ]);
    }
}
