<?php

namespace App\Http\Controllers;

// Controladores
use App\Http\Controllers\Controller;
use App\Http\Controllers\AnalitoEP15Controller;
use App\Http\Controllers\AnalitoController;

// Modelos
use App\NivelEP15;
use Illuminate\Support\Facades\DB;

// Requests
use Illuminate\Http\Request;
use Auth;

// Historicos
use App\Http\Historico\ResultadoEP15Historico;

class NivelEP15Controller extends Controller{
    
    protected $nivelEP15;
    protected $historico;
    
    public function __construct(){
        $this->tableResultadoEP15 = new NivelEP15();
    }

    /*
    public static function listItem($id){
        $tableResultadoEP15 = new ResultadoCorrida();    
        return $tableResultadoEP15
            ->select("*")
            ->join("corrida_analito", "corrida_analito.id_corrida_analito", "=", "resultado_corrida.corrida_analito_id_corrida_analito")
            ->join("corrida_area", "corrida_area.id_corrida_area", "=", "corrida_analito.corrida_area_id_corrida_area")
            ->join("area", "area.id_area", "=", "corrida_area.area_id_area")
            ->join("analito", "analito.id_analito", "=", "corrida_analito.analito_id_analito")
            ->where("id_resultado_corrida",$id)
            ->first();
    }
    
    
    public function getResultadosJSON(Request $req){
        $limite_aps =  AnalitoController::listByAnalitoCorrida($req->id_reference)->valor_aps;

        $resultados =  self::listByAnalitoCorrida($req->id_reference, "ascendente_prommetodos", $limite_aps);
        $promedios = self::listPromediosByAnalitoCorrida($resultados);
        $analitoCorrida = CorridaAnalitoController::listItem($req->id_reference);

        return response()
            ->json(
                array(
                    "resultados" => $resultados,
                    "info_analito" => $analitoCorrida,
                    "promedios" => $promedios
                )
            );
    } 


    public function informe(Request $req){

        $resultados = self::listByAnalitoCorrida($req->id_reference);
        $promedios = self::listPromediosByAnalitoCorrida($resultados);
        $resultadosC5 = self::listC5ByAnalitoCorrida($req->id_reference, $promedios->formula_b, $promedios->intercepcion_a);
        $promediosC5 = self::listPromediosC5ByAnalitoCorrida($resultadosC5, $promedios);
        $analitoCorrida = CorridaAnalitoController::listItem($req->id_reference);

        return view("resultadoCorrida.resultadoInformeFinal")
            ->with("resultados",$resultados)
            ->with("resultados_c5",$resultadosC5)
            ->with("analitoCorrida",$analitoCorrida)
            ->with("promedios",$promedios)
            ->with("promedios_c5",$promediosC5);
    }

    
    */

    public function create(Request $req){
        $niveles = self::listByAnalitoEP15($req->id_reference);
        $analitoEP15 = AnalitoEP15Controller::listItem($req->id_reference);
        return view("nivelEP15.nivelEP15Create")
            ->with("niveles",$niveles)
            ->with("analitoEP15",$analitoEP15);
    }


    public static function listByAnalitoEP15($id_referencia){
        $tableNivelEP15 = new NivelEP15();    
        return $tableNivelEP15
            ->select(
                "nivel.*",
                "analito_ep15.*"
            )
            ->join("analito_ep15", "analito_ep15.id_analito_ep15", "=", "nivel.analito_ep15_id_analito_ep15")
            ->where("analito_ep15.id_analito_ep15", $id_referencia)
            ->get();  
    }


    public static function listByAnalitoYNivel($nivel, $analitoEP15){
        $tableNivelEP15 = new NivelEP15();    
        return $tableNivelEP15
            ->select("id_nivel")
            ->where([
                ["nivel.analito_ep15_id_analito_ep15", $analitoEP15],
                ["nivel.nivel", $nivel]
            ])
            ->first();
    }

    public function multipleStore(Request $req){
        
        foreach($req->obj_json_nvl as $nivel){
            if($this->listByAnalitoYNivel($nivel["nivel"], $nivel["analito_ep15"])){ // Actualizacion
                $id_busqueda = $this->listByAnalitoYNivel($nivel["nivel"], $nivel["analito_ep15"])->id_nivel;
                $this->update($id_busqueda, $nivel);
            } else { // Registro
                $this->store($nivel);
            }
        }
    }

    public function store($registro){
        DB::table('nivel')->insert(
            [
                'analito_ep15_id_analito_ep15' => intval($registro["analito_ep15"]), 
                'nivel' => intval($registro["nivel"]), 
                'sigma_r' => floatval($registro["sigma_r"]),
                'sigma_wl' => floatval($registro["sigma_wl"]),
                'smp_porcentaje' => floatval($registro["smp_porcentaje"]),
                'media_inserto' => floatval($registro["media_inserto"]),
                'de_inserto' => floatval($registro["de_inserto"]),
                'smp_unidad' => floatval($registro["smp_unidad"]),
                'valor_diana' => floatval($registro["valor_diana"]),
                'media_gpar' => floatval($registro["media_gpar"]),
                'de_gpar' => floatval($registro["de_gpar"]),
                'n_lab_gpar' => floatval($registro["n_lab_gpar"]),
                // 'u_incertidumbre' => floatval($registro["u_incertidumbre"]),
                'u_incertidumbre' => floatval($registro["de_inserto"]) * 2,
                'k' => floatval($registro["k"]),
                // 'cvr' => floatval($registro["cvr"]),
                // 'cvi' => floatval($registro["cvi"]),
                // 'limite_s' => floatval($registro["limite_s"]),
                // 'limite_i' => floatval($registro["limite_i"]),                
            ]
        );
    }

    public function update($id, $modificacion){
        $this->tableResultadoEP15
            ->where("id_nivel", "=", $id)
            ->update([
                'sigma_r' => floatval($modificacion["sigma_r"]),
                'sigma_wl' => floatval($modificacion["sigma_wl"]),
                'smp_porcentaje' => floatval($modificacion["smp_porcentaje"]),
                'media_inserto' => floatval($modificacion["media_inserto"]),
                'de_inserto' => floatval($modificacion["de_inserto"]),
                'smp_unidad' => floatval($modificacion["smp_unidad"]),
                'valor_diana' => floatval($modificacion["valor_diana"]),
                'media_gpar' => floatval($modificacion["media_gpar"]),
                'de_gpar' => floatval($modificacion["de_gpar"]),
                'n_lab_gpar' => floatval($modificacion["n_lab_gpar"]),
                // 'u_incertidumbre' => floatval($modificacion["u_incertidumbre"]),
                'u_incertidumbre' => floatval($modificacion["de_inserto"]) * 2,
                'k' => floatval($modificacion["k"]),
                // 'cvr' => floatval($modificacion["cvr"]),
                // 'cvi' => floatval($modificacion["cvi"]),
                // 'limite_s' => floatval($modificacion["limite_s"]),
                // 'limite_i' => floatval($modificacion["limite_i"]),
            ]);
    }
}