<?php

namespace App\Http\Controllers;

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

// Modelos
use App\ResultadoCorrida;
use App\SuperUsuario;
use Illuminate\Support\Facades\DB;

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

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

//excel library
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
use PhpOffice\PhpSpreadsheet\Style\Alignment;

class ResultadoCorridaController extends Controller{

    protected $tableResultadoCorrida;
    protected $historico;

    public function __construct(){
        $this->tableResultadoCorrida = new ResultadoCorrida();
    }


    public static function listItem($id){
        $tableResultadoCorrida = new ResultadoCorrida();
        return $tableResultadoCorrida
            ->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 create(Request $req){
        $resultados = self::listByAnalitoCorrida($req->id_reference);
        $analitoCorrida = CorridaAnalitoController::listItem($req->id_reference);

        return view("resultadoCorrida.resultadoCorridaCreate")
            ->with("resultados",$resultados)
            ->with("analitoCorrida",$analitoCorrida);
    }


    public function getResultadosJSON(Request $req){
        $resultados =  self::listByAnalitoCorrida($req->id_reference, "ascendente_prommetodos");
        $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 informePrueba(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);
        $cliente = SuperUsuario::query()->where('id', Auth::user()->super_admin_id)->first();


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

    public function multipleStore(Request $req){

        // Recorrido para cada registro
        if(isset($req->registro)){
            foreach($req->registro as $registro){
                $this->store($registro);
            }
        }

        // Recorrida para cada modificacion
        if(isset($req->modificacion)){
            foreach($req->modificacion as $modificacion){
                $this->update($modificacion);
            }
        }
    }

    public function store($registro){
        $id_usuario = Auth::user()->id_usuario;

        DB::table('resultado_corrida')->insert(
            [
                'corrida_analito_id_corrida_analito' => intval($registro["id_corrida_analito"]),
                'usuario_id_usuario' => intval($id_usuario),
                "fecha" => $registro["fecha"],
                "codigo_paciente" => strval($registro["codigo_paciente"]),
                "resultado_m1c1" => floatval($registro["resultado_m1c1"]),
                "resultado_m1c2" => floatval($registro["resultado_m1c2"]),
                "resultado_m2c1" => floatval($registro["resultado_m2c1"]),
                "resultado_m2c2" => floatval($registro["resultado_m2c2"])
            ]
        );
    }

    public function update($modificacion){

        $this->historico = new ResultadoHistorico();
        $this->historico->store("update", $modificacion);

        $this->tableResultadoCorrida
            ->where("id_resultado_corrida", "=", $modificacion["id"])
            ->update([
                "corrida_analito_id_corrida_analito" => intval($modificacion["id_corrida_analito"]),
                "fecha" => $modificacion["fecha"],
                "codigo_paciente" => strval($modificacion["codigo_paciente"]),
                "resultado_m1c1" => floatval($modificacion["resultado_m1c1"]),
                "resultado_m1c2" => floatval($modificacion["resultado_m1c2"]),
                "resultado_m2c1" => floatval($modificacion["resultado_m2c1"]),
                "resultado_m2c2" => floatval($modificacion["resultado_m2c2"])
            ]);
    }

    public static function listByAnalitoCorrida($id_referencia, $ordenamiento = ""){
        $tableResultadoCorrida = new ResultadoCorrida();
        $objReturn = $tableResultadoCorrida
            ->select(
                "resultado_corrida.id_resultado_corrida",
                "resultado_corrida.fecha",
                "resultado_corrida.codigo_paciente",
                "resultado_corrida.resultado_m1c1",
                "resultado_corrida.resultado_m1c2",
                "resultado_corrida.resultado_m2c1",
                "resultado_corrida.resultado_m2c2",
                DB::raw("(resultado_corrida.resultado_m2c1 + resultado_corrida.resultado_m2c2)/2 as promedio_metodo_comparativo"),
                DB::raw("(resultado_corrida.resultado_m1c1 + resultado_corrida.resultado_m1c2)/2 as promedio_metodo_prueba"),
                DB::raw("(((resultado_corrida.resultado_m1c1 + resultado_corrida.resultado_m1c2)/2) / ((resultado_corrida.resultado_m2c1 + resultado_corrida.resultado_m2c2)/2)) * 100 as porcentaje_correlacion_metodos"),
                DB::raw("abs(resultado_corrida.resultado_m2c1 - resultado_corrida.resultado_m2c2) as valor_absoluto_metodo_comparativo"),
                DB::raw("abs(resultado_corrida.resultado_m1c1 - resultado_corrida.resultado_m1c2) as valor_absoluto_metodo_prueba"),
                DB::raw("(((resultado_corrida.resultado_m1c1 + resultado_corrida.resultado_m1c2)/2) + ((resultado_corrida.resultado_m2c1 + resultado_corrida.resultado_m2c2)/2) ) /2 as promedio_ambos_metodos"),
                DB::raw("(((resultado_corrida.resultado_m1c1 + resultado_corrida.resultado_m1c2)/2) - ((resultado_corrida.resultado_m2c1 + resultado_corrida.resultado_m2c2)/2)) as metodo_prueba_menos_metodo_comparacion"),

                DB::raw("((((resultado_corrida.resultado_m1c1 + resultado_corrida.resultado_m1c2)/2) - ((resultado_corrida.resultado_m2c1 + resultado_corrida.resultado_m2c2)/2)) * 100) / ((((resultado_corrida.resultado_m1c1 + resultado_corrida.resultado_m1c2)/2) + ((resultado_corrida.resultado_m2c1 + resultado_corrida.resultado_m2c2)/2) ) /2) as metodo_prueba_menos_metodo_comparacion_pctje"),

                DB::raw("((((resultado_corrida.resultado_m1c1 + resultado_corrida.resultado_m1c2)/2) + ((resultado_corrida.resultado_m2c1 + resultado_corrida.resultado_m2c2)/2) ) /2)*0.1 as metodo_prueba_menos_metodo_comparacion_pctje_determinado"),
                DB::raw("((((resultado_corrida.resultado_m1c1 + resultado_corrida.resultado_m1c2)/2) + ((resultado_corrida.resultado_m2c1 + resultado_corrida.resultado_m2c2)/2) ) /2)*(corrida_analito.limite_aps/100) as metodo_prueba_menos_metodo_comparacion_pctje_analito"),

                DB::raw("corrida_analito.limite_aps / 100 as pctje_analito"),

                DB::raw("(resultado_corrida.resultado_m1c1) - ((resultado_corrida.resultado_m2c1 + resultado_corrida.resultado_m2c2)/2) as r1_menos_metodo_comparacion"),
                DB::raw("(resultado_corrida.resultado_m1c2) - ((resultado_corrida.resultado_m2c1 + resultado_corrida.resultado_m2c2)/2) as r2_menos_metodo_comparacion"),
                DB::raw("((abs(resultado_corrida.resultado_m1c1 - resultado_corrida.resultado_m1c2)) / ((resultado_corrida.resultado_m1c1 + resultado_corrida.resultado_m1c2)/2)) as indice_metodo_prueba"),
                DB::raw("((abs(resultado_corrida.resultado_m2c1 - resultado_corrida.resultado_m2c2)) / ((resultado_corrida.resultado_m2c1 + resultado_corrida.resultado_m2c2)/2)) as indice_metodo_comparacion"),
                DB::raw("abs(resultado_corrida.resultado_m1c1 - resultado_corrida.resultado_m2c1) as valor_absoluto_primeros_resultados"),
                DB::raw("abs(resultado_corrida.resultado_m1c2 - resultado_corrida.resultado_m2c2) as valor_absoluto_segundos_resultados"),
                DB::raw("((abs(resultado_corrida.resultado_m1c1 - resultado_corrida.resultado_m2c1))/(resultado_corrida.resultado_m2c1)) as indice_primer_resultado_met_comparacion"),
                DB::raw("((abs(resultado_corrida.resultado_m1c2 - resultado_corrida.resultado_m2c2))/(resultado_corrida.resultado_m2c2)) as indice_segundo_resultado_met_comparacion"),
                DB::raw("(((resultado_corrida.resultado_m2c1 + resultado_corrida.resultado_m2c2)/2) - (SELECT avg((resultado_m2c1 + resultado_m2c2) / 2) FROM resultado_corrida join corrida_analito on corrida_analito.id_corrida_analito = resultado_corrida.corrida_analito_id_corrida_analito WHERE corrida_analito.id_corrida_analito = $id_referencia)) as met_comp_individual_menos_promedio_comp"),
                DB::raw("(pow(((resultado_corrida.resultado_m2c1 + resultado_corrida.resultado_m2c2)/2) - (SELECT avg((resultado_m2c1 + resultado_m2c2) / 2) FROM resultado_corrida join corrida_analito on corrida_analito.id_corrida_analito = resultado_corrida.corrida_analito_id_corrida_analito WHERE corrida_analito.id_corrida_analito = $id_referencia),2)) as met_comp_individual_menos_promedio_comp_cuadrado"),
                DB::raw("(((resultado_corrida.resultado_m1c1 + resultado_corrida.resultado_m1c2)/2) - (SELECT avg((resultado_m1c1 + resultado_m1c2) / 2) FROM resultado_corrida join corrida_analito on corrida_analito.id_corrida_analito = resultado_corrida.corrida_analito_id_corrida_analito WHERE corrida_analito.id_corrida_analito = $id_referencia)) as met_prueba_individual_menos_promedio_prueba"),
                DB::raw("(pow(((resultado_corrida.resultado_m1c1 + resultado_corrida.resultado_m1c2)/2) - (SELECT avg((resultado_m1c1 + resultado_m1c2) / 2) FROM resultado_corrida join corrida_analito on corrida_analito.id_corrida_analito = resultado_corrida.corrida_analito_id_corrida_analito WHERE corrida_analito.id_corrida_analito = $id_referencia),2)) as met_prueba_individual_menos_promedio_prueba_cuadrado"),
                DB::raw("((((resultado_corrida.resultado_m2c1 + resultado_corrida.resultado_m2c2)/2) - (SELECT avg((resultado_m2c1 + resultado_m2c2) / 2) FROM resultado_corrida join corrida_analito on corrida_analito.id_corrida_analito = resultado_corrida.corrida_analito_id_corrida_analito WHERE corrida_analito.id_corrida_analito = $id_referencia))) * ((((resultado_corrida.resultado_m1c1 + resultado_corrida.resultado_m1c2)/2) - (SELECT avg((resultado_m1c1 + resultado_m1c2) / 2) FROM resultado_corrida join corrida_analito on corrida_analito.id_corrida_analito = resultado_corrida.corrida_analito_id_corrida_analito WHERE corrida_analito.id_corrida_analito = $id_referencia))) as mult_entre_xix_yi_y"),
                "usuario.id_usuario",
                "usuario.nom_usuario",
                "corrida_analito.id_corrida_analito"
            )
            ->join("usuario", "usuario.id_usuario", "=", "resultado_corrida.usuario_id_usuario")
            ->join("corrida_analito", "corrida_analito.id_corrida_analito", "=", "resultado_corrida.corrida_analito_id_corrida_analito")
            ->where("corrida_analito.id_corrida_analito", $id_referencia);

        if($ordenamiento == "ascendente_prommetodos"){
            return $objReturn
                ->orderBy("promedio_ambos_metodos","asc")
                ->get();
        } else {
            return $objReturn
                ->orderBy("resultado_corrida.fecha","asc")
                ->get();
        }

    }

    public static function listC5ByAnalitoCorrida($id_referencia, $formula_b, $intercepcion_a){
        $tableResultadoCorrida = new ResultadoCorrida();

        return $tableResultadoCorrida
            ->select(
                "resultado_corrida.id_resultado_corrida",
                "resultado_corrida.fecha",
                "resultado_corrida.codigo_paciente",
                "resultado_corrida.resultado_m1c1",
                "resultado_corrida.resultado_m1c2",
                "resultado_corrida.resultado_m2c1",
                "resultado_corrida.resultado_m2c2",
                DB::raw("(resultado_corrida.resultado_m2c1 + resultado_corrida.resultado_m2c2)/2 as promedio_metodo_comparativo"),
                DB::raw("(resultado_corrida.resultado_m1c1 + resultado_corrida.resultado_m1c2)/2 as promedio_metodo_prueba"),
                DB::raw("(((resultado_corrida.resultado_m2c1 + resultado_corrida.resultado_m2c2)/2) - (SELECT avg((resultado_m2c1 + resultado_m2c2) / 2) FROM resultado_corrida join corrida_analito on corrida_analito.id_corrida_analito = resultado_corrida.corrida_analito_id_corrida_analito WHERE corrida_analito.id_corrida_analito = $id_referencia)) as met_comp_individual_menos_promedio_comp"),
                DB::raw("(pow(((resultado_corrida.resultado_m2c1 + resultado_corrida.resultado_m2c2)/2) - (SELECT avg((resultado_m2c1 + resultado_m2c2) / 2) FROM resultado_corrida join corrida_analito on corrida_analito.id_corrida_analito = resultado_corrida.corrida_analito_id_corrida_analito WHERE corrida_analito.id_corrida_analito = $id_referencia),2)) as met_comp_individual_menos_promedio_comp_cuadrado"),
                DB::raw("(((resultado_corrida.resultado_m1c1 + resultado_corrida.resultado_m1c2)/2) - (SELECT avg((resultado_m1c1 + resultado_m1c2) / 2) FROM resultado_corrida join corrida_analito on corrida_analito.id_corrida_analito = resultado_corrida.corrida_analito_id_corrida_analito WHERE corrida_analito.id_corrida_analito = $id_referencia)) as met_prueba_individual_menos_promedio_prueba"),
                DB::raw("(pow(((resultado_corrida.resultado_m1c1 + resultado_corrida.resultado_m1c2)/2) - (SELECT avg((resultado_m1c1 + resultado_m1c2) / 2) FROM resultado_corrida join corrida_analito on corrida_analito.id_corrida_analito = resultado_corrida.corrida_analito_id_corrida_analito WHERE corrida_analito.id_corrida_analito = $id_referencia),2)) as met_prueba_individual_menos_promedio_prueba_cuadrado"),
                DB::raw("($intercepcion_a + ($formula_b * ((resultado_corrida.resultado_m2c1 + resultado_corrida.resultado_m2c2)/2))) as yai"),
                DB::raw("(((resultado_corrida.resultado_m1c1 + resultado_corrida.resultado_m1c2)/2)) - ($intercepcion_a + ($formula_b * ((resultado_corrida.resultado_m2c1 + resultado_corrida.resultado_m2c2)/2))) as residuali"),
                DB::raw("pow((((resultado_corrida.resultado_m1c1 + resultado_corrida.resultado_m1c2)/2)) - ($intercepcion_a + ($formula_b * ((resultado_corrida.resultado_m2c1 + resultado_corrida.resultado_m2c2)/2))),2) as residuali_cuadrado")
            )
            ->join("usuario", "usuario.id_usuario", "=", "resultado_corrida.usuario_id_usuario")
            ->join("corrida_analito", "corrida_analito.id_corrida_analito", "=", "resultado_corrida.corrida_analito_id_corrida_analito")
            ->where("corrida_analito.id_corrida_analito", $id_referencia)
            ->orderBy("resultado_corrida.fecha","asc")
            ->get();
    }

    public static function listPromediosC5ByAnalitoCorrida($resultados_c5, $promedios){

        $cont = 0;
        $sumatoria_residuali_cuadrado = 0;
        $s_y_x = 0;
        $sesgo150 = 0;

        foreach($resultados_c5 as $resultado_c5){
            $sumatoria_residuali_cuadrado = $sumatoria_residuali_cuadrado + $resultado_c5->residuali_cuadrado;
            $cont++;
        }

        if($cont > 0){
            $s_y_x = sqrt(($sumatoria_residuali_cuadrado) / (sizeof($resultados_c5)-2));
            $sesgo150 = $promedios->intercepcion_a + ((($promedios->formula_b) * 150) - 150);
            $bc_menos_2s = (2 * $s_y_x * sqrt((1/sizeof($resultados_c5))+(pow(
                150 - $promedios->avg_promedios_met_comparacion
            ,2))/ $promedios->sumatoria_met_comp_individual_menos_promedio_comp_cuadrado));

            $indicador_bc_inf = $sesgo150 - $bc_menos_2s;
            $indicador_bc_sup = $sesgo150 + $bc_menos_2s;
        }

        return (object) array(
            "sumatoria_residuali_cuadrado" => $sumatoria_residuali_cuadrado,
            "s_y_x" => $s_y_x,
            "sesgo150" => $sesgo150,
            "bc_menos_2s" => $bc_menos_2s,
            "indicador_bc_inf" => $indicador_bc_inf,
            "indicador_bc_sup" => $indicador_bc_sup,
        );
    }

    public static function listPromediosByAnalitoCorrida($resultados){

        $cont = 0;
        $avg_promedios_met_comparacion = 0;
        $avg_promedios_met_prueba = 0;
        $avg_indice_met_comparacion = 0;
        $avg_indice_met_prueba = 0;
        $avg_diferencias_met_comparacion = 0;
        $avg_diferencias_met_prueba = 0;
        $sumatoria_e = 0;
        $sumatoria_e_prima = 0;
        $sumatoria_met_comp_individual_menos_promedio_comp_cuadrado = 0;
        $sumatoria_met_prueba_individual_menos_promedio_prueba_cuadrado = 0;
        $sumatoria_mult_entre_xix_yi_y = 0;

        foreach($resultados as $resultado){
            $avg_promedios_met_comparacion = $avg_promedios_met_comparacion + $resultado->promedio_metodo_comparativo;
            $avg_promedios_met_prueba = $avg_promedios_met_prueba + $resultado->promedio_metodo_prueba;
            $avg_indice_met_comparacion = $avg_indice_met_comparacion + $resultado->indice_metodo_comparacion;
            $avg_indice_met_prueba = $avg_indice_met_prueba + $resultado->indice_metodo_prueba;
            $avg_diferencias_met_comparacion = $avg_diferencias_met_comparacion + $resultado->valor_absoluto_metodo_comparativo;
            $avg_diferencias_met_prueba = $avg_diferencias_met_prueba + $resultado->valor_absoluto_metodo_prueba;
            $sumatoria_e = $sumatoria_e + $resultado->valor_absoluto_primeros_resultados + $resultado->valor_absoluto_segundos_resultados;
            $sumatoria_e_prima = $sumatoria_e_prima + $resultado->indice_primer_resultado_met_comparacion + $resultado->indice_segundo_resultado_met_comparacion;
            $sumatoria_met_comp_individual_menos_promedio_comp_cuadrado = $sumatoria_met_comp_individual_menos_promedio_comp_cuadrado + $resultado->met_comp_individual_menos_promedio_comp_cuadrado;
            $sumatoria_met_prueba_individual_menos_promedio_prueba_cuadrado = $sumatoria_met_prueba_individual_menos_promedio_prueba_cuadrado + $resultado->met_prueba_individual_menos_promedio_prueba_cuadrado;
            $sumatoria_mult_entre_xix_yi_y = $sumatoria_mult_entre_xix_yi_y + $resultado->mult_entre_xix_yi_y;
            $cont++;
        }


        if($cont > 0){
            $avg_promedios_met_comparacion = $avg_promedios_met_comparacion / $cont;
            $avg_promedios_met_prueba = $avg_promedios_met_prueba / $cont;
            $avg_indice_met_comparacion = $avg_indice_met_comparacion / $cont;
            $avg_indice_met_prueba = $avg_indice_met_prueba / $cont;
            $avg_diferencias_met_comparacion = $avg_diferencias_met_comparacion / $cont;
            $avg_diferencias_met_prueba = $avg_diferencias_met_prueba / $cont;
            $division_r = $sumatoria_mult_entre_xix_yi_y / (sqrt($sumatoria_met_comp_individual_menos_promedio_comp_cuadrado) * sqrt($sumatoria_met_prueba_individual_menos_promedio_prueba_cuadrado));
            $formula_b = $sumatoria_mult_entre_xix_yi_y / $sumatoria_met_comp_individual_menos_promedio_comp_cuadrado;
            $intercepcion_a = $avg_promedios_met_prueba - ($formula_b * $avg_promedios_met_comparacion);
        }

        return (object) array(
            "avg_promedios_met_comparacion" => (isset($avg_promedios_met_comparacion) ? $avg_promedios_met_comparacion : 0),
            "avg_promedios_met_prueba" => (isset($avg_promedios_met_prueba) ? $avg_promedios_met_prueba : 0),
            "avg_promedios_met_comparacion_x4" => (isset($avg_promedios_met_comparacion) ? $avg_promedios_met_comparacion * 4 : 0),
            "avg_promedios_met_prueba_x4" => (isset($avg_promedios_met_prueba) ? $avg_promedios_met_prueba * 4 : 0),
            "avg_indice_met_comparacion" => (isset($avg_indice_met_comparacion) ? $avg_indice_met_comparacion : 0),
            "avg_indice_met_prueba" => (isset($avg_indice_met_prueba) ? $avg_indice_met_prueba : 0),
            "avg_indice_met_comparacion_x4" => (isset($avg_indice_met_comparacion) ? $avg_indice_met_comparacion * 4 : 0),
            "avg_indice_met_prueba_x4" => (isset($avg_indice_met_prueba) ? $avg_indice_met_prueba * 4 : 0),
            "avg_diferencias_met_comparacion" => (isset($avg_diferencias_met_comparacion) ? $avg_diferencias_met_comparacion : 0),
            "avg_diferencias_met_prueba" => (isset($avg_diferencias_met_prueba) ? $avg_diferencias_met_prueba : 0),
            "avg_diferencias_met_comparacion_x4" => (isset($avg_diferencias_met_comparacion) ? $avg_diferencias_met_comparacion * 4 : 0),
            "avg_diferencias_met_prueba_x4" => (isset($avg_diferencias_met_prueba) ? $avg_diferencias_met_prueba * 4 : 0),
            "sumatoria_e" => (isset($sumatoria_e) ? $sumatoria_e : 0),
            "sumatoria_e_prima" => (isset($sumatoria_e_prima) ? $sumatoria_e_prima : 0),
            "sumatoria_e_ochentavo" => (isset($sumatoria_e) ? $sumatoria_e * (1/80) : 0),
            "sumatoria_e_prima_ochentavo" => (isset($sumatoria_e_prima) ? $sumatoria_e_prima * (1/80) : 0),
            "sumatoria_met_comp_individual_menos_promedio_comp_cuadrado" => (isset($sumatoria_met_comp_individual_menos_promedio_comp_cuadrado) ? $sumatoria_met_comp_individual_menos_promedio_comp_cuadrado : 0),
            "sumatoria_met_prueba_individual_menos_promedio_prueba_cuadrado" => (isset($sumatoria_met_prueba_individual_menos_promedio_prueba_cuadrado) ? $sumatoria_met_prueba_individual_menos_promedio_prueba_cuadrado : 0),
            "sumatoria_mult_entre_xix_yi_y" => (isset($sumatoria_mult_entre_xix_yi_y) ? $sumatoria_mult_entre_xix_yi_y : 0),
            "division_r" => (isset($division_r) ? $division_r : 0),
            "formula_b" => (isset($formula_b) ? $formula_b : 0),
            "intercepcion_a" => (isset($intercepcion_a) ? $intercepcion_a : 0),
        );
    }

    public function destroy(Request $req){

        $this->historico = new ResultadoHistorico();
        $this->historico->store("destroy", $req);

        $this->tableResultadoCorrida
            ->where("id_resultado_corrida",$req->id)
            ->delete();
    }

    
    public function downloadTemplateResults(){
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();
        $sheet->setCellValue('A1', 'Código paciente');
        $sheet->setCellValue('B1', 'Método prueba - resultados');
        $sheet->setCellValue('C1', 'Método prueba - Repetición');
        $sheet->setCellValue('D1', 'Método comparativo - resultados');
        $sheet->setCellValue('E1', 'Método comparativo - Repetición');

        
        $writer = new Xlsx($spreadsheet);

        $filename = 'template_resultados_corrida.xlsx';

        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="'. $filename .'"');
        header('Cache-Control: max-age=0');
        
        $writer->save('php://output');

        exit;
    }
}
