<?php

namespace App\Http\Requests;

use App\AnalitoEP15;
use App\CorridaArea;
use App\ProyectoEP15;
use App\Rules\AnalitoEP15NumProjectRule;
use App\SuperUsuario;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Rule;
use App\Http\Controllers\CorridaAnalitoController;
use App\CorridaAnalito;

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


    public function rules(){
        if(isset($this->id)){ // Actualizacion

            return [
                "id_analito" => [
                    "min:1",
                    "max:40",
                    // Rule::unique('corrida_analito','analito_id_analito')->where(function ($query) {
                    //     $corridaAnalito = CorridaAnalitoController::listItem($this->id);
                    //     return $query->where([
                    //         ["corrida_area_id_corrida_area","=",$corridaAnalito->corrida_area_id_corrida_area],
                    //         ["metodologia_prueba","=",$corridaAnalito->metodologia_prueba],
                    //         ["metodologia_comparacion","=",$corridaAnalito->metodologia_comparacion],
                    //         ["modo_metodologia_prueba","=",$corridaAnalito->modo_metodologia_prueba],
                    //         ["modo_metodologia_comparacion","=",$corridaAnalito->modo_metodologia_comparacion],
                    //         ["unidad_metodologia_prueba","=",$corridaAnalito->unidad_metodologia_prueba],
                    //         ["unidad_metodologia_comparacion","=",$corridaAnalito->unidad_metodologia_comparacion],
                    //         ["analizador_prueba","=",$corridaAnalito->analizador_prueba],
                    //         ["analizador_comparacion","=",$corridaAnalito->analizador_comparacion],
                    //         ["diferencia_maxima_permisible", "=", $corridaAnalito->diferencia_maxima_permisible],
                    //         ["limite_aps", "=", $corridaAnalito->limite_aps]
                    //     ]);
                    // })
                ],
                "id_metodologia_prueba" => [
                    "min:1",
                    "max:40",
                    // Rule::unique('corrida_analito','metodologia_prueba')->where(function ($query) {
                    //     $corridaAnalito = CorridaAnalitoController::listItem($this->id);
                    //     return $query->where([
                    //         ["analito_id_analito","=",$corridaAnalito->analito_id_analito],
                    //         ["corrida_area_id_corrida_area","=",$corridaAnalito->corrida_area_id_corrida_area],
                    //         ["metodologia_comparacion","=",$corridaAnalito->metodologia_comparacion],
                    //         ["modo_metodologia_prueba","=",$corridaAnalito->modo_metodologia_prueba],
                    //         ["modo_metodologia_comparacion","=",$corridaAnalito->modo_metodologia_comparacion],
                    //         ["unidad_metodologia_prueba","=",$corridaAnalito->unidad_metodologia_prueba],
                    //         ["unidad_metodologia_comparacion","=",$corridaAnalito->unidad_metodologia_comparacion],
                    //         ["analizador_prueba","=",$corridaAnalito->analizador_prueba],
                    //         ["analizador_comparacion","=",$corridaAnalito->analizador_comparacion],
                    //         ["diferencia_maxima_permisible", "=", $corridaAnalito->diferencia_maxima_permisible],
                    //         ["limite_aps", "=", $corridaAnalito ->limite_aps]
                    //     ]);
                    // })
                ],
                "id_metodologia_comparacion" => [
                    "min:1",
                    "max:40",
                    // Rule::unique('corrida_analito','metodologia_comparacion')->where(function ($query) {
                    //     $corridaAnalito = CorridaAnalitoController::listItem($this->id);
                    //     return $query->where([
                    //         ["analito_id_analito","=",$corridaAnalito->analito_id_analito],
                    //         ["corrida_area_id_corrida_area","=",$corridaAnalito->corrida_area_id_corrida_area],
                    //         ["metodologia_prueba","=",$corridaAnalito->metodologia_prueba],
                    //         ["modo_metodologia_prueba","=",$corridaAnalito->modo_metodologia_prueba],
                    //         ["modo_metodologia_comparacion","=",$corridaAnalito->modo_metodologia_comparacion],
                    //         ["unidad_metodologia_prueba","=",$corridaAnalito->unidad_metodologia_prueba],
                    //         ["unidad_metodologia_comparacion","=",$corridaAnalito->unidad_metodologia_comparacion],
                    //         ["analizador_prueba","=",$corridaAnalito->analizador_prueba],
                    //         ["analizador_comparacion","=",$corridaAnalito->analizador_comparacion],
                    //         ["diferencia_maxima_permisible", "=", $corridaAnalito->diferencia_maxima_permisible],
                    //         ["limite_aps", "=", $corridaAnalito ->limite_aps]
                    //     ]);
                    // })
                ],
                "id_modo_metodologia_prueba" => [
                    "min:1",
                    "max:40",
                    // Rule::unique('corrida_analito','modo_metodologia_prueba')->where(function ($query) {
                    //     $corridaAnalito = CorridaAnalitoController::listItem($this->id);
                    //     return $query->where([
                    //         ["analito_id_analito","=",$corridaAnalito->analito_id_analito],
                    //         ["corrida_area_id_corrida_area","=",$corridaAnalito->corrida_area_id_corrida_area],
                    //         ["metodologia_prueba","=",$corridaAnalito->metodologia_prueba],
                    //         ["metodologia_comparacion","=",$corridaAnalito->metodologia_comparacion],
                    //         ["modo_metodologia_comparacion","=",$corridaAnalito->modo_metodologia_comparacion],
                    //         ["unidad_metodologia_prueba","=",$corridaAnalito->unidad_metodologia_prueba],
                    //         ["unidad_metodologia_comparacion","=",$corridaAnalito->unidad_metodologia_comparacion],
                    //         ["analizador_prueba","=",$corridaAnalito->analizador_prueba],
                    //         ["analizador_comparacion","=",$corridaAnalito->analizador_comparacion],
                    //         ["diferencia_maxima_permisible", "=", $corridaAnalito->diferencia_maxima_permisible],
                    //         ["limite_aps", "=", $corridaAnalito ->limite_aps]
                    //     ]);
                    // })
                ],
                "id_modo_metodologia_comparacion" => [
                    "min:1",
                    "max:40",
                    // Rule::unique('corrida_analito','modo_metodologia_comparacion')->where(function ($query) {
                    //     $corridaAnalito = CorridaAnalitoController::listItem($this->id);
                    //     return $query->where([
                    //         ["analito_id_analito","=",$corridaAnalito->analito_id_analito],
                    //         ["corrida_area_id_corrida_area","=",$corridaAnalito->corrida_area_id_corrida_area],
                    //         ["metodologia_prueba","=",$corridaAnalito->metodologia_prueba],
                    //         ["metodologia_comparacion","=",$corridaAnalito->metodologia_comparacion],
                    //         ["modo_metodologia_prueba","=",$corridaAnalito->modo_metodologia_prueba],
                    //         ["unidad_metodologia_prueba","=",$corridaAnalito->unidad_metodologia_prueba],
                    //         ["unidad_metodologia_comparacion","=",$corridaAnalito->unidad_metodologia_comparacion],
                    //         ["analizador_prueba","=",$corridaAnalito->analizador_prueba],
                    //         ["analizador_comparacion","=",$corridaAnalito->analizador_comparacion],
                    //         ["diferencia_maxima_permisible", "=", $corridaAnalito->diferencia_maxima_permisible],
                    //         ["limite_aps", "=", $corridaAnalito ->limite_aps]
                    //     ]);
                    // })
                ],
                "id_unidad_prueba" => [
                    "min:1",
                    "max:40",
                    // Rule::unique('corrida_analito','unidad_metodologia_prueba')->where(function ($query) {
                    //     $corridaAnalito = CorridaAnalitoController::listItem($this->id);
                    //     return $query->where([
                    //         ["analito_id_analito","=",$corridaAnalito->analito_id_analito],
                    //         ["corrida_area_id_corrida_area","=",$corridaAnalito->corrida_area_id_corrida_area],
                    //         ["metodologia_prueba","=",$corridaAnalito->metodologia_prueba],
                    //         ["metodologia_comparacion","=",$corridaAnalito->metodologia_comparacion],
                    //         ["modo_metodologia_prueba","=",$corridaAnalito->modo_metodologia_prueba],
                    //         ["modo_metodologia_comparacion","=",$corridaAnalito->modo_metodologia_comparacion],
                    //         ["unidad_metodologia_comparacion","=",$corridaAnalito->unidad_metodologia_comparacion],
                    //         ["analizador_prueba","=",$corridaAnalito->analizador_prueba],
                    //         ["analizador_comparacion","=",$corridaAnalito->analizador_comparacion],
                    //         ["diferencia_maxima_permisible", "=", $corridaAnalito->diferencia_maxima_permisible],
                    //         ["limite_aps", "=", $corridaAnalito ->limite_aps]
                    //     ]);
                    // })
                ],
                "id_unidad_comparacion" => [
                    "min:1",
                    "max:40",
                    // Rule::unique('corrida_analito','unidad_metodologia_comparacion')->where(function ($query) {
                    //     $corridaAnalito = CorridaAnalitoController::listItem($this->id);
                    //     return $query->where([
                    //         ["analito_id_analito","=",$corridaAnalito->analito_id_analito],
                    //         ["corrida_area_id_corrida_area","=",$corridaAnalito->corrida_area_id_corrida_area],
                    //         ["metodologia_prueba","=",$corridaAnalito->metodologia_prueba],
                    //         ["metodologia_comparacion","=",$corridaAnalito->metodologia_comparacion],
                    //         ["modo_metodologia_prueba","=",$corridaAnalito->modo_metodologia_prueba],
                    //         ["modo_metodologia_comparacion","=",$corridaAnalito->modo_metodologia_comparacion],
                    //         ["unidad_metodologia_prueba","=",$corridaAnalito->unidad_metodologia_prueba],
                    //         ["analizador_prueba","=",$corridaAnalito->analizador_prueba],
                    //         ["analizador_comparacion","=",$corridaAnalito->analizador_comparacion],
                    //         ["diferencia_maxima_permisible","=",$corridaAnalito->diferencia_maxima_permisible],
                    //         ["limite_aps", "=", $corridaAnalito ->limite_aps]
                    //     ]);
                    // })
                ],
                "id_analizador_prueba" => [
                    "min:1",
                    "max:40",
                    // Rule::unique('corrida_analito','analizador_prueba')->where(function ($query) {
                    //     $corridaAnalito = CorridaAnalitoController::listItem($this->id);
                    //     return $query->where([
                    //         ["corrida_area_id_corrida_area","=",$corridaAnalito->corrida_area_id_corrida_area],
                    //         ["analito_id_analito","=",$corridaAnalito->analito_id_analito],
                    //         ["metodologia_prueba","=",$corridaAnalito->metodologia_prueba],
                    //         ["metodologia_comparacion","=",$corridaAnalito->metodologia_comparacion],
                    //         ["modo_metodologia_prueba","=",$corridaAnalito->modo_metodologia_prueba],
                    //         ["modo_metodologia_comparacion","=",$corridaAnalito->modo_metodologia_comparacion],
                    //         ["unidad_metodologia_prueba","=",$corridaAnalito->unidad_metodologia_prueba],
                    //         ["unidad_metodologia_comparacion","=",$corridaAnalito->unidad_metodologia_comparacion],
                    //         ["analizador_comparacion","=",$corridaAnalito->analizador_comparacion],
                    //         ["diferencia_maxima_permisible", "=", $corridaAnalito->diferencia_maxima_permisible],
                    //         ["limite_aps", "=", $corridaAnalito ->limite_aps]
                    //     ]);
                    // })
                ],
                "id_analizador_comparacion" => [
                    "min:1",
                    "max:40",
                    // Rule::unique('corrida_analito','analizador_comparacion')->where(function ($query) {
                    //     $corridaAnalito = CorridaAnalitoController::listItem($this->id);
                    //     return $query->where([
                    //         ["corrida_area_id_corrida_area","=",$corridaAnalito->corrida_area_id_corrida_area],
                    //         ["analito_id_analito","=",$corridaAnalito->analito_id_analito],
                    //         ["metodologia_prueba","=",$corridaAnalito->metodologia_prueba],
                    //         ["metodologia_comparacion","=",$corridaAnalito->metodologia_comparacion],
                    //         ["modo_metodologia_prueba","=",$corridaAnalito->modo_metodologia_prueba],
                    //         ["modo_metodologia_comparacion","=",$corridaAnalito->modo_metodologia_comparacion],
                    //         ["unidad_metodologia_prueba","=",$corridaAnalito->unidad_metodologia_prueba],
                    //         ["unidad_metodologia_comparacion","=",$corridaAnalito->unidad_metodologia_comparacion],
                    //         ["analizador_prueba","=",$corridaAnalito->analizador_prueba],
                    //         ["diferencia_maxima_permisible", "=", $corridaAnalito->diferencia_maxima_permisible],
                    //         ["limite_aps", "=", $corridaAnalito ->limite_aps]
                    //     ]);
                    // })
                ],
                "diferencia_maxima_permisible" => [
                    "numeric",
                    // Rule::unique('corrida_analito','diferencia_maxima_permisible')->where(function ($query) {
                    //     $corridaAnalito = CorridaAnalitoController::listItem($this->id);
                    //     return $query->where([
                    //         ["corrida_area_id_corrida_area","=",$corridaAnalito->corrida_area_id_corrida_area],
                    //         ["analito_id_analito","=",$corridaAnalito->analito_id_analito],
                    //         ["metodologia_prueba","=",$corridaAnalito->metodologia_prueba],
                    //         ["metodologia_comparacion","=",$corridaAnalito->metodologia_comparacion],
                    //         ["modo_metodologia_prueba","=",$corridaAnalito->modo_metodologia_prueba],
                    //         ["modo_metodologia_comparacion","=",$corridaAnalito->modo_metodologia_comparacion],
                    //         ["unidad_metodologia_prueba","=",$corridaAnalito->unidad_metodologia_prueba],
                    //         ["unidad_metodologia_comparacion","=",$corridaAnalito->unidad_metodologia_comparacion],
                    //         ["analizador_prueba","=",$corridaAnalito->analizador_prueba],
                    //         ["analizador_comparacion","=",$corridaAnalito->analizador_comparacion],
                    //         ["limite_aps", "=", $corridaAnalito ->limite_aps]
                    //     ]);
                    // })
                ], 
                "limite_aps" => [
                    "numeric",
                    // Rule::unique('corrida_analito','limite_aps')->where(function ($query) {
                    //     $corridaAnalito = CorridaAnalitoController::listItem($this->id);
                    //     return $query->where([
                    //         ["corrida_area_id_corrida_area","=",$corridaAnalito->corrida_area_id_corrida_area],
                    //         ["analito_id_analito","=",$corridaAnalito->analito_id_analito],
                    //         ["metodologia_prueba","=",$corridaAnalito->metodologia_prueba],
                    //         ["metodologia_comparacion","=",$corridaAnalito->metodologia_comparacion],
                    //         ["modo_metodologia_prueba","=",$corridaAnalito->modo_metodologia_prueba],
                    //         ["modo_metodologia_comparacion","=",$corridaAnalito->modo_metodologia_comparacion],
                    //         ["unidad_metodologia_prueba","=",$corridaAnalito->unidad_metodologia_prueba],
                    //         ["unidad_metodologia_comparacion","=",$corridaAnalito->unidad_metodologia_comparacion],
                    //         ["analizador_prueba","=",$corridaAnalito->analizador_prueba],
                    //         ["analizador_comparacion","=",$corridaAnalito->analizador_comparacion],
                    //         ["diferencia_maxima_permisible", "=", $corridaAnalito->diferencia_maxima_permisible]
                    //     ]);
                    // })
                ]
            ];
        } else { // Cuando es un registro
            return [
                "id_corrida_area" => [
                    "required",
                    "min:1",
                    "max:40",
                ],
                "id_analito" => [
                    "required",
                    "min:1",
                    "max:40",
                    new AnalitoEP15NumProjectRule(),
                    // Rule::unique('corrida_analito','analito_id_analito')->where(function ($query) {
                    //     return $query->where([
                    //         ["corrida_area_id_corrida_area","=",$this->id_corrida_area],
                    //         ["metodologia_prueba","=",$this->id_metodologia_prueba],
                    //         ["metodologia_comparacion","=",$this->id_metodologia_comparacion],
                    //         ["modo_metodologia_prueba","=",$this->id_modo_metodologia_prueba],
                    //         ["modo_metodologia_comparacion","=",$this->id_modo_metodologia_comparacion],
                    //         ["unidad_metodologia_prueba","=",$this->id_unidad_prueba],
                    //         ["unidad_metodologia_comparacion","=",$this->id_unidad_comparacion],
                    //         ["analizador_prueba","=",$this->id_analizador_prueba],
                    //         ["analizador_comparacion","=",$this->id_analizador_comparacion],
                    //         ["diferencia_maxima_permisible", "=", $this->diferencia_maxima_permisible]
                    //     ]);
                    // })
                ],
                "id_metodologia_prueba" => [
                    "required",
                    "min:1",
                    "max:40"
                ],
                "id_metodologia_comparacion" => [
                    "required",
                    "min:1",
                    "max:40"
                ],
                "id_modo_metodologia_prueba" => [
                    "required",
                    "min:1",
                    "max:40"
                ],
                "id_modo_metodologia_comparacion" => [
                    "required",
                    "min:1",
                    "max:40"
                ],
                "id_unidad_prueba" => [
                    "required",
                    "min:1",
                    "max:40"
                ],
                "id_unidad_comparacion" => [
                    "required",
                    "min:1",
                    "max:40"
                ],
                "id_analizador_prueba" => [
                    "required",
                    "min:1",
                    "max:40"
                ],
                "id_analizador_comparacion" => [
                    "required",
                    "min:1",
                    "max:40"
                ],
                "diferencia_maxima_permisible" => [
                    "numeric",
                    "required"
                ],
                "limite_aps" => [
                    "numeric",
                    "required"
                ]
            ];
        }
    }


    public function attributes(){
        return [
            'id_corrida_area' => 'proyecto',
            'id_analito' => 'analito',
            'id_metodologia_prueba' => 'metodología de prueba',
            'id_metodologia_comparacion' => 'metodología de comparación',
            'id_modo_metodologia_prueba' => 'modo de prueba',
            'id_modo_metodologia_comparacion' => 'modo de comparación',
            'id_unidad_prueba' => 'unidad de prueba',
            'id_unidad_comparacion' => 'unidad de comparación',
            'diferencia_maxima_permisible' => 'diferencia máxima permisible',
            'limite_aps' => 'límite APS'
        ];
    }


    public function messages(){
        return [
            'id_corrida_area.required' => 'El campo es obligatorio',
            'id_analito.required' => 'El campo es obligatorio',
            'id_metodologia_prueba.required' => 'El campo es obligatorio',
            'id_metodologia_comparacion.required' => 'El campo es obligatorio',
            'id_modo_metodologia_prueba.required' => 'El campo es obligatorio',
            'id_modo_metodologia_comparacion.required' => 'El campo es obligatorio',
            'id_unidad_prueba.required' => 'El campo es obligatorio',
            'id_unidad_comparacion.required' => 'El campo es obligatorio',
            'id_analito.unique' => 'El analito a comparar ya se encuentra registrado',
            'diferencia_maxima_permisible.required' => 'El campo es obligatorio',
            'limite_aps.required' => 'El campo es obligatorio'
        ];
    }
}
