<?php declare(strict_types=1);

namespace App\Http\Requests\Private\Profile;

use App\Contracts\FormRequestDto;
use App\Dto\Request\Private\Profile\UpdateSettings;
use App\Enums\Lang;
use App\Helpers\Helpers;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules\Enum;

final class UpdateSettingsRequest extends FormRequest implements FormRequestDto
{
    /**
     * Get the validation rules that apply to the request.
     */
    public function rules(): array
    {
        return [
            'lang' => ['nullable', new Enum(Lang::class)],
            'timezone' => ['nullable', Rule::in(Helpers::getTimeZoneList()->keys()->toArray())]
        ];
    }

    public function getDto(): UpdateSettings
    {
        $lang = $this->input('lang', null);
        if (!is_null($lang)) {
            $lang = Lang::from((int) $lang);
        }

        return new UpdateSettings(
            lang: $lang,
            timezone: $this->input('timezone', null),
        );
    }
}
