<?php

namespace App\Http\Requests;

use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;

class AdminMenuItemCreate extends FormRequest
{

    protected function failedValidation(Validator $validator)
    {
        //Do not throw anything. It will have a customized response
    }

    /**
     * Get data to be validated from the request.
     *
     * @return array
     */
    public function validationData(): array
    {
        return [
            'type' => $this->input('type'),
            'page_id' => $this->input('page_id'),
            'new_window' => $this->input('new_window'),
            'title' => $this->input('menu_label', ''),
            'url' => $this->input('link_url'),
            'new_window' => $this->input('new_window') == 'true'
        ];
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules(): array
    {
        $rules = [
            'type' => 'required|in:page,link',
            'page_id' => 'nullable|required_if:type,page|integer',
            'new_window' => 'boolean'
        ];

        $rules = array_merge($rules, $this->_itemRules());
        return $rules;
    }

    private function _itemRules(): array
    {
        $languages = LaravelLocalization::getSupportedLanguagesKeys();

        $rules = generateLangRules(array(
            'title' => 'required_if:type,link|max:100',
            'url' => 'required_if:type,link|max:255'
        ), $languages);

        return $rules;
    }
}
