<?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 PublicationsIndex 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 [
                'year'       => (string)$this->input('year'),
                'theme' => (string)$this->input('theme'),
                'page'       => (int)$this->input('page'),
            ];
        }

        public function rules()
        {
            return [
                'page'         => "integer",
                'year'         => "string",
                'theme'   => "string",
            ];
        }

        public function filters()
        {
            return [
                'page'       => "trim|strip_tags|xss_clean",
                'year'       => "trim|strip_tags|xss_clean",
                'theme' => "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);
        }
    }
