<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Str;
use Illuminate\Validation\ValidationException;

class SearchProfileCreateRequest extends FormRequest
{
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules(): array
    {
        return [
            'name' => 'required|string|max:100',
            'type' => 'required|string|in:competitions,results',
            'filters' => 'required|array',
            'emailUpdates' => 'required|boolean'
        ];
    }

    /**
     * Filters to be applied to the input.
     *
     * @return array
     */
    public function filters(): array
    {
        return [
            'name' => "trim|strip_tags|xss_clean",
            'type' => "trim|strip_tags|xss_clean",
            'filters' => "trim|strip_tags|xss_clean",
            'emailUpdates' => "trim|strip_tags|xss_clean"
        ];
    }

    public function withValidator($validator)
    {
        $validator->after(function ($validator) {
            $validatorClass = "App\\Validators\\" . Str::ucfirst($this->type) . "Validator";
            if (class_exists($validatorClass) && method_exists($validatorClass, 'validate')) {
                try {
                    $validatorClass::validate($this->input('filters'));
                } catch (ValidationException $e) {
                    $validator->errors()->merge($e->errors());
                }
            } else {
                $validator->errors()->add('type', "Missing Validator or method for this type");
            }
        });
    }
}
