<?php

namespace App\Http\Requests\Auth;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Hash;

class ChangePasswordRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     */
    public function authorize(): bool
    {
        return auth()->check();
    }

    /**
     * Get the validation rules that apply to the request.
     */
    public function rules(): array
    {
        $user = $this->user();

        return [
            'new' => [
                'required',
                'string',
                'min:8',
                'max:255',
                'regex:/^(?=.*\D).+$/',
                function ($attribute, $value, $fail) use ($user) {
                    if ($user->with_password == 0) {
                        return;
                    }

                    if (Hash::check($value, $user->password)) {
                        $fail(__('messages.password_same_current_error'));
                    }
                },
            ],
            'repeat' => [
                'required',
                'string',
                'same:new',
            ],
        ];
    }

    /**
     * Get custom messages for validator errors.
     */
    public function messages(): array
    {
        return [
            'new.required' => 'رمز عبور جدید الزامی است.',
            'new.min'      => 'رمز عبور جدید باید حداقل ۸ کاراکتر باشد.',
            'new.max'      => 'رمز عبور جدید نباید بیشتر از ۲۵۵ کاراکتر باشد.',
            'new.regex'    => 'رمز عبور جدید نمی‌تواند فقط شامل اعداد باشد. حداقل یک حرف یا کاراکتر غیرعددی وارد کنید.',

            'repeat.required' => 'تکرار رمز عبور جدید الزامی است.',
            'repeat.same'     => 'تکرار رمز عبور جدید باید با رمز عبور جدید مطابقت داشته باشد.',
        ];
    }

    /**
     * Get custom attributes for validator errors.
     */
    public function attributes(): array
    {
        return [
            'new'    => 'رمز عبور جدید',
            'repeat' => 'تکرار رمز عبور جدید',
        ];
    }
}
