<?php

namespace App\Models\Configuracion;

class PapelGenericoModel extends \App\Models\GoBaseModel
{
    protected $table = "lg_papel_generico";

    /**
     * Whether primary key uses auto increment.
     *
     * @var bool
     */
    protected $useAutoIncrement = true;

    const SORTABLE = [
        //0 => "t1.id",
        0 => "t1.nombre",
        1 => "t1.code",
        2 => "t1.code_ot",
        3 => "t1.show_in_client",
    ];

    protected $allowedFields = ["nombre", "code", "code_ot", "show_in_client", "deleted_at", "is_deleted"];
    protected $returnType = "App\Entities\Configuracion\PapelGenerico";

    protected $useTimestamps = true;
    protected $useSoftDeletes = false;

    protected $createdField = "created_at";

    protected $updatedField = "updated_at";

    public static $labelField = "nombre";

    protected $validationRules = [
        "code" => [
            "label" => "PapelGenericoes.code",
            "rules" => "trim|max_length[5]",
        ],
        "code_ot" => [
            "label" => "PapelGenericoes.codeOt",
            "rules" => "trim|max_length[5]",
        ],
        "nombre" => [
            "label" => "PapelGenericoes.nombre",
            "rules" => "trim|required|max_length[255]",
        ],
    ];

    protected $validationMessages = [
        "code" => [
            "max_length" => "PapelGenericoes.validation.code.max_length",
        ],
        "code_ot" => [
            "max_length" => "PapelGenericoes.validation.code_ot.max_length",
        ],
        "nombre" => [
            "max_length" => "PapelGenericoes.validation.nombre.max_length",
            "required" => "PapelGenericoes.validation.nombre.required",
        ],
    ];

    /**
     * Get resource data.
     *
     * @param string $search
     *
     * @return \CodeIgniter\Database\BaseBuilder
     */
    public function getResource(string $search = "")
    {
        $builder = $this->db
            ->table($this->table . " t1")
            ->select(
                "t1.id AS id, t1.nombre AS nombre, t1.code AS code, t1.code_ot AS code_ot, t1.show_in_client AS show_in_client"
            )
            ->where("is_deleted", 0);

        return empty($search)
            ? $builder
            : $builder
            ->groupStart()
            ->like("t1.id", $search)
            ->orLike("t1.nombre", $search)
            ->orLike("t1.code", $search)
            ->orLike("t1.code_ot", $search)
            ->orLike("t1.id", $search)
            ->orLike("t1.nombre", $search)
            ->orLike("t1.code", $search)
            ->orLike("t1.code_ot", $search)
            ->groupEnd();
    }


    public function getPapelForComparador($tipo, $is_cubierta = false, $is_sobrecubierta = false, $rotativa = false)
    {
        /*
        1.-> Tipo impresion
	        2.-> Maquina
		        3.-> Papeles impresion asociados a esa maquina
			        4.-> papeles genericos que aparecen en esos papeles impresion
        */
        $builder = $this->db
            ->table($this->table . " t1")
            ->select(
                "t1.id as id, t1.nombre AS nombre"
                // for debug, t2.nombre AS nombre_papel_impresion, t4.nombre AS maquina_nombre, t5.uso AS tarifa_uso, t5.tipo AS tarifa_tipo"
            )
            ->distinct('t1.id')
            ->join("lg_papel_impresion t2", "t2.papel_generico_id = t1.id", "left")
            ->join("lg_maquina_papel_impresion t3", "t3.papel_impresion_id = t2.id", "left")
            ->join("lg_maquinas t4", "t3.maquina_id = t4.id", "left")
            ->join("lg_maquinas_tarifas_impresion t5", "t5.maquina_id = t4.id", "left")

            ->where("t1.is_deleted", 0)
            ->where("t2.is_deleted", 0)
            ->where("t2.isActivo", 1)
            ->where("t3.active", 1)
            ->where("t4.is_deleted", 0)
            ->where("t4.tipo", "impresion")
            ->where("t5.is_deleted", 0)
            ->where("t5.tipo", $tipo);

            if($is_cubierta==true){
                
                    $builder->where("t2.cubierta", 1);
                    $builder->where("t5.uso", 'cubierta');
            }
            else{
                $builder->where("t2.cubierta", 0);
                $builder->where("t5.uso", 'interior');
            }
            
            if($is_sobrecubierta==true){
                    $builder->where("t2.sobrecubierta", 1);
                    $builder->where("t5.uso", 'sobrecubierta');
            }
            else{
                $builder->where("t2.sobrecubierta", 0);
            }

            if($is_cubierta==false && $is_sobrecubierta==false){
                $builder->where("t5.uso", 'interior');
            }

            if($rotativa==true){
                    $builder->where("t2.rotativa", 1);
            }

        $data = $builder->orderBy("t1.nombre", "asc")->get()->getResultObject();
        //var_dump($this->db->getLastQuery());
        return $data;
    }

    public function getGramajeComparador(string $papel_generico_nombre="", $uso="")
    {
        if($uso == 'cubierta' || $uso == 'sobrecubierta')
            $tipo = 'colorhq';
        else
            $tipo=$uso; // color y colorhq valen para los dos
        if($uso == 'bn')
            $tipo="negro";
        if($uso == 'bnhq')
            $tipo="negrohq";

        $builder = $this->db
            ->table($this->table . " t1")
            ->select(
                "t2.gramaje AS text"
            )
            ->join("lg_papel_impresion t2", "t2.papel_generico_id = t1.id", "left")
            ->join("lg_maquina_papel_impresion t3", "t3.papel_impresion_id = t2.id", "left")
            ->join("lg_maquinas t4", "t3.maquina_id = t4.id", "left")
            ->join("lg_maquinas_tarifas_impresion t5", "t5.maquina_id = t4.id", "left")
            
            ->where("t1.is_deleted", 0)
            ->where("t2.is_deleted", 0)
            ->where("t2.isActivo", 1)
            ->where("t3.active", 1)
            ->where("t4.is_deleted", 0)
            ->where("t4.tipo", "impresion")
            ->where("t5.tipo", $tipo)
            ->where("t1.nombre", $papel_generico_nombre);
            
            $uso_tarifa = 'interior';

            if($uso == 'bn' || $uso == 'bnhq')
                $builder->where("t2.bn", 1);
            else if ($uso == 'color' || $uso == 'colorhq')
                $builder->where("t2.color", 1);
            else if ($uso == 'cubierta'){
                $uso_tarifa = 'cubierta';
                $builder->where("t2.cubierta", 1);
            }
            else if ($uso == 'sobrecubierta'){
                $uso_tarifa = 'sobrecubierta';
                $builder->where("t2.sobrecubierta", 1);
            }

            $builder->where("t5.uso", $uso_tarifa);
    
            $values = $builder->orderBy("t2.gramaje", "asc")->get()->getResultObject();
            $id = 1;
            foreach ($values as $value){
                $value->id = $id;
                $id++;
            }
            $values_array = array_map( function( $value ) {
                return $value->text;
            }, $values );
            $unique_values = array_unique($values_array);
            return array_values(array_intersect_key($values, $unique_values));

    }

    //tipo: negro, negrohq, color, colorhq
    //uso: interior, rotativa, cubierta, sobrecubierta
    public function getGramajeLineasPresupuesto($papel_generico_id=0, $tipo="", $uso="")
    {
        $builder = $this->db
            ->table($this->table . " t1")
            ->select(
                "t2.gramaje AS text"
            )
            ->join("lg_papel_impresion t2", "t2.papel_generico_id = t1.id", "left")
            ->join("lg_maquina_papel_impresion t3", "t3.papel_impresion_id = t2.id", "left")
            ->join("lg_maquinas t4", "t3.maquina_id = t4.id", "left")
            ->join("lg_maquinas_tarifas_impresion t5", "t5.maquina_id = t4.id", "left")
            
            ->where("t1.is_deleted", 0)
            ->where("t2.is_deleted", 0)
            ->where("t2.isActivo", 1)
            ->where("t3.active", 1)
            ->where("t4.is_deleted", 0)
            ->where("t4.tipo", "impresion")
            ->where("t5.tipo", $tipo)
            ->where("t1.id", $papel_generico_id);

            $uso_tarifa = 'interior';

            if ($uso == 'cubierta'){
                $uso_tarifa = 'cubierta';
                $builder->where("t2.cubierta", 1);
            }
            else if ($uso == 'sobrecubierta'){
                $uso_tarifa = 'sobrecubierta';
                $builder->where("t2.sobrecubierta", 1);
            }
            else{
                if($tipo == 'negro' || $tipo == 'negrohq')
                    $builder->where("t2.bn", 1);
                else if ($tipo == 'color' || $tipo == 'colorhq')
                    $builder->where("t2.color", 1);
            }
            
            if($uso=='rotativa')
                $builder->where("t2.rotativa", 1);
            else
                $builder->where("t2.rotativa", 0);

            $builder->where("t5.uso", $uso_tarifa);
            
            
            $values = $builder->orderBy("t2.gramaje", "asc")->get()->getResultObject();
            $id = 1;
            foreach ($values as $value){
                $value->id = $id;
                $id++;
            }
            $values_array = array_map( function( $value ) {
                return $value->text;
            }, $values );
            $unique_values = array_unique($values_array);
            return array_values(array_intersect_key($values, $unique_values));

    }
}
