<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
use App\Http\Controllers\AnalitoController;
use App\Analito;

class AnalitoRequest extends FormRequest {
    public function authorize(){
        return true;
    }

    
    public function rules(){
        if(isset($this->id)){
            return [
                "id_area" => [
                    "min:1",
                    "max:40",
                    Rule::unique('analito','area_id_area')->where(function ($query){
                        $analito = AnalitoController::listItem($this->id);
                        return $query->where("nom_analito",$analito->nom_analito);
                    })
                ],
                'nombre' => [
                    "min:2",
                    "max:50",
                    Rule::unique('analito','nom_analito')->where(function ($query){
                        $analito = AnalitoController::listItem($this->id);
                        return $query->where("area_id_area",$analito->id_area);
                    })
                ]
            ];
        } else {
            return [
                "id_area" => [
                    "required",
                    "min:1|max:40"
                ],
                'nombre' => [
                    "required",
                    "min:2",
                    "max:50",
                    Rule::unique('analito','nom_analito')->where(function ($query) {
                        return $query->where("area_id_area",$this->id_area);
                    })
                ]
            ];
        }   
    }
    
    
    public function attributes(){
        return [
            'id_area' => 'área',
            'nombre' => 'nombre'
        ];
    }
    

    public function messages(){
        return [
            'id_area.required' => 'El campo es obligatorio',
            'nombre.required' => 'El campo es obligatorio',
            
            'id_area.numeric' => 'El campo debe ser un identificador válido',
            
            'nombre.unique' => 'El nombre del analito ya existe para el área especificada',
            'id_area.unique' => 'El nombre del analito ya existe para el área especificada',
            
            'nombre.min' => 'El nombre del analito debe tener mínimo 2 carácteres',
            'nombre.max' => 'El nombre del analito debe tener máximo 50 carácteres',
        ];
    }
}