<?php

    namespace App\Http\Requests\Api;

    use App\Libs\Security\XSSCleanFilter;
    use Illuminate\Contracts\Validation\Validator;
    use Illuminate\Foundation\Http\FormRequest;
    use Illuminate\Validation\ValidationException;
    use Waavi\Sanitizer\Laravel\SanitizesInput;

    class SearchStore extends FormRequest
    {
        use SanitizesInput;

        /**
         * Determine if the user is authorized to make this request.
         *
         * @return bool
         */
        public function authorize()
        {
            return TRUE;
        }

        protected function validationData()
        {
            return [
                'q'    => (string)$this->input('q'),
                'skip' => (int)$this->input('skip'),
                'take' => $this->input('take'),
            ];
        }

        /**
         * Get the validation rules that apply to the request.
         *
         * @return array
         */
        public function rules()
        {
            return [
                'q'    => "string",
                'skip' => "integer",
                'take' => "integer|nullable",
            ];
        }

        public function filters()
        {
            return [
                'q'    => "trim|strip_tags|xss_clean",
                'skip' => "trim|strip_tags|xss_clean",
                'take' => "trim|strip_tags|xss_clean",
            ];
        }

        public function customFilters()
        {
            return ['xss_clean' => XSSCleanFilter::class];
        }

        protected function failedValidation(Validator $validator)
        {
            throw (new ValidationException($validator))
                ->errorBag($this->errorBag);
        }
    }
