<?php

namespace App\Http\Requests\V1;

use Illuminate\Foundation\Http\FormRequest;
use App\Libs\Api\ParsedListParams;
use App\Libs\Support\Sanitizer\Traits\SanitizesInput;

class EntryContentRequest extends FormRequest
{
    use SanitizesInput;


    /**
     * Get data to be validated from the request.
     *
     * @return array
     */
    public function validationData(): array
    {
        $defaultValidationData   = ParsedListParams::getDefaultApiListRequestValidationData($this);
        //optional aditional validation data
        $adicionalValidationData = [];

        return array_replace($defaultValidationData, $adicionalValidationData);
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules(): array
    {
        $defaultRules   = ParsedListParams::getDefaultApiListRequestRules();
        $adicionalRules = [
            'filter.latitude'       => 'numeric|between:-90,90|required_with:filter.longitude,filter.radius',
            'filter.longitude'      => 'numeric|between:-180,180|required_with:filter.latitude,,filter.radius',
            'filter.radius'         => 'numeric|nullable|gt:0',
        ];
        return array_replace($defaultRules, $adicionalRules);
    }

    /**
     * Filters to be applied to the input.
     *
     * @return array
     */
    public function filters()
    {

        $defaultFilters  = ParsedListParams::getDefaultApiListFilters();
        //optional aditional filters to apply
        $adicionalFilters = [
            'filter.latitude'    => 'cast:float',
            'filter.longitude'   => 'cast:float',
            'filter.radius'      => 'cast:integer',
        ];
        return array_replace($defaultFilters, $adicionalFilters);
    }
}
