<?php

namespace App\Models\Presupuestos;

class PresupuestoLineaModel extends \App\Models\BaseModel
{
    protected $table = "presupuesto_linea";

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

    protected $allowedFields = [
        "presupuesto_id",
        "tipo",
        "paginas",
        "paginas_impresion", //guardas
        "paginas_color_posicion",
        "solapas_ancho",
        "papel_id",
        "papel_impresion_id",
        "formas",
        "gramaje",
        "pliegos_libro",
        "pliegos_pedido",
        "pliegos_precio",
        "libro",
        "pedido",
        "mano",
        "peso",
        "maquina_id",
        "tarifa_impresion_id",
        "click",
        "precio",
        "total_papel_pedido",
        "margen_papel_pedido",
        "margen_impresion",
        "rotativa_impresion",
        "rotativa_pag_color",
        "rotativa_set_values",
        "rotativa_negro",
        "rotativa_cyan",
        "rotativa_magenta",
        "rotativa_amarillo",
        "rotativa_gota_negro",
        "rotativa_gota_color",
        "rotativa_saturacion",
        "rotativa_a_favor_fibra",
        "rotativa_mxm",
        "rotativa_area_paginas",
        "rotativa_num_gotas_negro",
        "rotativa_num_gotas_cyan",
        "rotativa_num_gotas_magenta",
        "rotativa_num_gotas_amarillo",
        "rotativa_peso_gotas_negro",
        "rotativa_peso_gotas_cyan",
        "rotativa_peso_gotas_magenta",
        "rotativa_peso_gotas_amarillo",
        "rotativa_precio_pag_negro",
        "rotativa_precio_pag_color",
        "rotativa_factor_altura",
        "rotativa_factor_anchura",
        "rotativa_pag_por_pliego",
        "rotativa_metros_libro",
        "rotativa_metros_total",
        "rotativa_clicks_libro",
        "rotativa_clicks_total",
        "rotativa_precio_tinta",
        "rotativa_total_impresion",
        "rotativa_velocidad_corte",
        "rotativa_tiempo_corte",
        "rotativa_precio_hora_corte",
        "rotativa_total_corte",
        'check_impresion_total',
        'check_papel_total',
        "maquina",
        "papel_impresion",
        "maquina_tipo",
        "horas_maquina",
        "precio_hora",
        "precio_impresion",
        "total_linea",
    ];
    protected $returnType = "App\Entities\Presupuestos\PresupuestoLineaEntity";

    public static $labelField = "presupuesto_id";

    protected $validationRules = [
        "click" => [
            "label" => "PresupuestoLineas.click",
            "rules" => "decimal|permit_empty",
        ],
        "formas" => [
            "label" => "PresupuestoLineas.formas",
            "rules" => "trim|max_length[16313]",
        ],
        "gramaje" => [
            "label" => "PresupuestoLineas.gramaje",
            "rules" => "decimal|permit_empty",
        ],
        "libro" => [
            "label" => "PresupuestoLineas.libro",
            "rules" => "decimal|permit_empty",
        ],
        "mano" => [
            "label" => "PresupuestoLineas.mano",
            "rules" => "decimal|permit_empty",
        ],
        "paginas" => [
            "label" => "PresupuestoLineas.paginas",
            "rules" => "required|integer",
        ],
        "paginas_color_posicion" => [
            "label" => "PresupuestoLineas.paginasColorPosicion",
            "rules" => "trim|max_length[16313]",
        ],
        "pedido" => [
            "label" => "PresupuestoLineas.pedido",
            "rules" => "decimal|permit_empty",
        ],
        "peso" => [
            "label" => "PresupuestoLineas.peso",
            "rules" => "decimal|permit_empty",
        ],
        "pliegos_libro" => [
            "label" => "PresupuestoLineas.pliegosLibro",
            "rules" => "decimal|permit_empty",
        ],
        "pliegos_pedido" => [
            "label" => "PresupuestoLineas.pliegosPedido",
            "rules" => "decimal|permit_empty",
        ],
        "pliegos_precio" => [
            "label" => "PresupuestoLineas.pliegosPrecio",
            "rules" => "decimal|permit_empty",
        ],
        "precio" => [
            "label" => "PresupuestoLineas.precio",
            "rules" => "decimal|permit_empty",
        ],
        "rotativa_amarillo" => [
            "label" => "PresupuestoLineas.rotativaAmarillo",
            "rules" => "required|decimal",
        ],
        "rotativa_area_paginas" => [
            "label" => "PresupuestoLineas.rotativaAreaPaginas",
            "rules" => "required|decimal",
        ],
        "rotativa_clicks_libro" => [
            "label" => "PresupuestoLineas.rotativaClicksLibro",
            "rules" => "required|decimal",
        ],
        "rotativa_clicks_total" => [
            "label" => "PresupuestoLineas.rotativaClicksTotal",
            "rules" => "required|decimal",
        ],
        "rotativa_cyan" => [
            "label" => "PresupuestoLineas.rotativaCyan",
            "rules" => "required|decimal",
        ],
        "rotativa_factor_altura" => [
            "label" => "PresupuestoLineas.rotativaFactorAltura",
            "rules" => "required|decimal",
        ],
        "rotativa_factor_anchura" => [
            "label" => "PresupuestoLineas.rotativaFactorAnchura",
            "rules" => "required|decimal",
        ],
        "rotativa_gota_color" => [
            "label" => "PresupuestoLineas.rotativaGotaColor",
            "rules" => "required|decimal",
        ],
        "rotativa_gota_negro" => [
            "label" => "PresupuestoLineas.rotativaGotaNegro",
            "rules" => "required|decimal",
        ],
        "rotativa_impresion" => [
            "label" => "PresupuestoLineas.rotativaImpresion",
            "rules" => "required|in_list[negro,color]",
        ],
        "rotativa_magenta" => [
            "label" => "PresupuestoLineas.rotativaMagenta",
            "rules" => "required|decimal",
        ],
        "rotativa_metros_libro" => [
            "label" => "PresupuestoLineas.rotativaMetrosLibro",
            "rules" => "required|decimal",
        ],
        "rotativa_metros_total" => [
            "label" => "PresupuestoLineas.rotativaMetrosTotal",
            "rules" => "required|decimal",
        ],
        "rotativa_mxm" => [
            "label" => "PresupuestoLineas.rotativaMxm",
            "rules" => "decimal|permit_empty",
        ],
        "rotativa_negro" => [
            "label" => "PresupuestoLineas.rotativaNegro",
            "rules" => "required|decimal",
        ],
        "rotativa_num_gotas_amarillo" => [
            "label" => "PresupuestoLineas.rotativaNumGotasAmarillo",
            "rules" => "required|decimal",
        ],
        "rotativa_num_gotas_cyan" => [
            "label" => "PresupuestoLineas.rotativaNumGotasCyan",
            "rules" => "required|decimal",
        ],
        "rotativa_num_gotas_magenta" => [
            "label" => "PresupuestoLineas.rotativaNumGotasMagenta",
            "rules" => "required|decimal",
        ],
        "rotativa_num_gotas_negro" => [
            "label" => "PresupuestoLineas.rotativaNumGotasNegro",
            "rules" => "required|decimal",
        ],
        "rotativa_pag_color" => [
            "label" => "PresupuestoLineas.rotativaPagColor",
            "rules" => "required|integer",
        ],
        "rotativa_pag_por_pliego" => [
            "label" => "PresupuestoLineas.rotativaPagPorPliego",
            "rules" => "required|decimal",
        ],
        "rotativa_peso_gotas_amarillo" => [
            "label" => "PresupuestoLineas.rotativaPesoGotasAmarillo",
            "rules" => "required|decimal",
        ],
        "rotativa_peso_gotas_cyan" => [
            "label" => "PresupuestoLineas.rotativaPesoGotasCyan",
            "rules" => "required|decimal",
        ],
        "rotativa_peso_gotas_magenta" => [
            "label" => "PresupuestoLineas.rotativaPesoGotasMagenta",
            "rules" => "required|decimal",
        ],
        "rotativa_peso_gotas_negro" => [
            "label" => "PresupuestoLineas.rotativaPesoGotasNegro",
            "rules" => "required|decimal",
        ],
        "rotativa_precio_hora_corte" => [
            "label" => "PresupuestoLineas.rotativaPrecioHoraCorte",
            "rules" => "required|decimal",
        ],
        "rotativa_precio_pag_color" => [
            "label" => "PresupuestoLineas.rotativaPrecioPagColor",
            "rules" => "required|decimal",
        ],
        "rotativa_precio_pag_negro" => [
            "label" => "PresupuestoLineas.rotativaPrecioPagNegro",
            "rules" => "required|decimal",
        ],
        "rotativa_precio_tinta" => [
            "label" => "PresupuestoLineas.rotativaPrecioTinta",
            "rules" => "required|decimal",
        ],
        "rotativa_saturacion" => [
            "label" => "PresupuestoLineas.rotativaSaturacion",
            "rules" => "required|decimal",
        ],
        "rotativa_tiempo_corte" => [
            "label" => "PresupuestoLineas.rotativaTiempoCorte",
            "rules" => "required|decimal",
        ],
        "rotativa_total_corte" => [
            "label" => "PresupuestoLineas.rotativaTotalCorte",
            "rules" => "required|decimal",
        ],
        "rotativa_total_impresion" => [
            "label" => "PresupuestoLineas.rotativaTotalImpresion",
            "rules" => "required|decimal",
        ],
        "rotativa_velocidad_corte" => [
            "label" => "PresupuestoLineas.rotativaVelocidadCorte",
            "rules" => "required|decimal",
        ],
        "solapas_ancho" => [
            "label" => "PresupuestoLineas.solapasAncho",
            "rules" => "required|decimal",
        ],
        "tipo" => [
            "label" => "PresupuestoLineas.tipo",
            "rules" => "required|in_list[bn,bnhq,color,colorhq,cubierta,sobrecubierta,rot_bn,rot_color]",
        ],
    ];


    public function findAllWithAllRelations(string $selcols = "*", int $limit = null, int $offset = 0)
    {
        $sql =
            "SELECT t1." .
            $selcols .
            ",  t2.id AS presupuesto,  t3.nombre AS papel,  t4.nombre AS papel_impresion,  t5.nombre AS maquina,  t6.tipo AS tarifa_impresion FROM " .
            $this->table .
            " t1  LEFT JOIN presupuestos t2 ON t1.presupuesto_id = t2.id LEFT JOIN lg_papel_generico t3 ON t1.papel_id = t3.id LEFT JOIN lg_papel_impresion t4 ON t1.papel_impresion_id = t4.id LEFT JOIN lg_maquinas t5 ON t1.maquina_id = t5.id LEFT JOIN lg_maquinas_tarifas_impresion t6 ON t1.tarifa_impresion_id = t6.id";
        if (!is_null($limit) && intval($limit) > 0) {
            $sql .= " LIMIT " . intval($limit);
        }

        if (!is_null($offset) && intval($offset) > 0) {
            $sql .= " OFFSET " . intval($offset);
        }

        $query = $this->db->query($sql);
        $result = $query->getResultObject();
        return $result;
    }

    public function createForPresupuesto($presupuesto_id)
    {

        $tipos = ['bn', 'bnhq', 'color', 'colorhq', 'cubierta', 'sobrecubierta', 'rot_bn', 'rot_color'];
        foreach ($tipos as $tipo) {
            $builder = $this->db
                ->table($this->table . " t1");
            $data = [
                'presupuesto_id' => $presupuesto_id,
                'tipo' => $tipo,
            ];

            $builder->insert($data);
        }
    }

    public function getLineasPresupuesto($presupuesto_id = -1)
    {
        $builder = $this->db
            ->table($this->table . " t1")
            ->select(
                "*"
            )
            ->where("t1.presupuesto_id", $presupuesto_id);

        return $builder->orderBy("t1.id", "asc")->get()->getResultObject();
    }

    public function updatePreciosLineasPresupuesto($id_linea, $new_linea)
    {
        $rot_total_impresion = $new_linea['fields']['precio_click_pedido'] ?? 0.0 +
            $new_linea['fields']['precio_tinta'] ?? 0.0 + $new_linea['fields']['total_Corte'] ?? 0.0;

        $data = [
            "pliegos_precio" => $new_linea['fields']['precios_pliegos'],
            "libro" => $new_linea['fields']['precio_libro'],
            "total_papel_pedido" => round($new_linea['fields']['precio_pedido'], 2),
            "margen_papel_pedido" => round($new_linea['fields']['margen_papel_pedido'], 2),
            "mano" => $new_linea['fields']['mano'],
            "precio_click" => round($new_linea['fields']['precio_click'], 6),
            "precio_click_pedido" => round($new_linea['fields']['precio_click_pedido'], 2),
            "margen_click_pedido" => round($new_linea['fields']['margen_click_pedido'], 2),
            "tiempo_maquina" => strtotime($new_linea['fields']['tiempo_maquina']) - strtotime('TODAY'),
            "tarifa_impresion_id" => $new_linea['fields']['tarifa_impresion_id'],
            "rotativa_total_impresion" => $rot_total_impresion,
            "rotativa_a_favor_fibra" => $new_linea['fields']['a_favor_fibra'] ?? 0,
            "rotativa_mxm" => $new_linea['fields']['maquina_velocidad'] ?? 0,
            "rotativa_resolucion" => $new_linea['fields']['resolucion'] ?? 0,
            "rotativa_area_paginas" => $new_linea['fields']['superficie'] ?? 0,
            "rotativa_num_gotas_negro" => $new_linea['fields']['num_gotas_negro'] ?? 0,
            "rotativa_num_gotas_cyan" => $new_linea['fields']['num_gotas_cyan'] ?? 0,
            "rotativa_num_gotas_magenta" => $new_linea['fields']['num_gotas_magenta'] ?? 0,
            "rotativa_num_gotas_amarillo" => $new_linea['fields']['num_gotas_amarillo'] ?? 0,
            "rotativa_num_gotas_cg" => $new_linea['fields']['num_gotas_cg'] ?? 0,
            "rotativa_peso_gotas_negro" => $new_linea["fields"]["peso_gotas_negro"] ?? 0,
            "rotativa_peso_gotas_cyan" => $new_linea['fields']['peso_gotas_cyan'] ?? 0,
            "rotativa_peso_gotas_magenta" => $new_linea['fields']['peso_gotas_magenta'] ?? 0,
            "rotativa_peso_gotas_amarillo" => $new_linea['fields']['peso_gotas_amarillo'] ?? 0,
            "rotativa_peso_gotas_cg" => $new_linea['fields']['peso_gotas_cg'] ?? 0,
            "rotativa_peso_gotas_negro_pedido" => $new_linea["fields"]["peso_gotas_negro_pedido"] ?? 0,
            "rotativa_peso_gotas_cyan_pedido" => $new_linea["fields"]["peso_gotas_cyan_pedido"] ?? 0,
            "rotativa_peso_gotas_magenta_pedido" => $new_linea["fields"]["peso_gotas_magenta_pedido"] ?? 0,
            "rotativa_peso_gotas_amarillo_pedido" => $new_linea["fields"]["peso_gotas_amarillo_pedido"] ?? 0,
            "rotativa_peso_gotas_cg_pedido" => $new_linea["fields"]["peso_gotas_cg_pedido"] ?? 0,
            "rotativa_precio_pag_negro" => $new_linea['fields']['precio_pagina_negro'] ?? 0,
            "rotativa_precio_pag_color" => $new_linea['fields']['precio_pagina_color'] ?? 0,
            "rotativa_factor_altura" => $new_linea['fields']['factor_altura'] ?? 0,
            "rotativa_factor_anchura" => $new_linea['fields']['factor_anchura'] ?? 0,
            "rotativa_pag_por_pliego" => $new_linea['fields']['paginas_por_pliego'] ?? 0,
            "rotativa_metros_libro" => $new_linea['fields']['metros_papel_libro'] ?? 0,
            "rotativa_metros_total" => $new_linea['fields']['metros_papel_total'] ?? 0,
            "rotativa_clicks_libro" => $new_linea['fields']['clicks_libro'] ?? 0,
            "rotativa_clicks_total" => $new_linea['fields']['clicks_pedido'] ?? 0,
            "rotativa_precio_tinta" => $new_linea['fields']['precio_tinta'] ?? 0,
            "rotativa_velocidad_corte" => $new_linea['fields']['velocidad_corte'] ?? 0,
            "rotativa_tiempo_corte" => $new_linea['fields']['tiempo_corte'] ?? 0,
            "rotativa_precio_hora_corte" => $new_linea['fields']['precio_hora_corte'] ?? 0,
            "rotativa_total_corte" => $new_linea['fields']['total_corte'] ?? 0,
            "horas_maquina" => round($new_linea['fields']['horas_maquina'], 4),
            "precio_hora" => $new_linea['fields']['precio_hora'] ?? 0,
            "precio_impresion" => $new_linea['fields']['precio_impresion_horas'] ?? 0,
            "total_linea" => round($new_linea['fields']['total_impresion'], 2) ?? 0,
            "margen_impresion" => $new_linea['fields']['margen_impresion_horas'] ?? 0,
        ];

        if (array_key_exists('datosTipologias', $new_linea['fields'])) {
            $data += [
                "rotativa_negro" => $new_linea['fields']['datosTipologias']->negro ?? 0,
                "rotativa_cyan" => $new_linea['fields']['datosTipologias']->cyan ?? 0,
                "rotativa_magenta" => $new_linea['fields']['datosTipologias']->magenta ?? 0,
                "rotativa_amarillo" => $new_linea['fields']['datosTipologias']->amarillo ?? 0,
                "rotativa_cg" => $new_linea['fields']['datosTipologias']->cg ?? 0,
                "rotativa_gota_negro" => $new_linea['fields']['datosTipologias']->gota_negro ?? 0,
                "rotativa_gota_color" => $new_linea['fields']['datosTipologias']->gota_color
            ];
        }
        $this->db
            ->table($this->table . " t1")
            ->where('id', $id_linea)
            ->set($data)
            ->update();
    }

    public function insertLPFromBackend($presupuesto_id, $new_linea)
    {
        $rot_total_impresion = $new_linea['precio_click_pedido'] ?? 0.0 +
            $new_linea['precio_tinta'] ?? 0.0 + $new_linea['total_Corte'] ?? 0.0;

        $formas = json_encode(array(
            'maquina_ancho'=>  $new_linea['dimensiones_maquina'][0],
            'maquina_alto' => $new_linea['dimensiones_maquina'][1],
            'maquina_impresion_ancho'=>  $new_linea['dimensiones_maquina_impresion'][0],
            'maquina_impresion_alto' => $new_linea['dimensiones_maquina_impresion'][1],
            'formas' => $new_linea['num_formas']['value'],
            'formas_v'=> $new_linea['num_formas']['num_formas_verticales'],
            'formas_h'=> $new_linea['num_formas']['num_formas_horizontales'],
            'formas_orientacion'=> $new_linea['num_formas']['posicion_formas']
        ));

        sscanf($new_linea['tiempo_maquina'], "%d:%d:%d", $hours, $minutes, $seconds);
        $tiempo = isset($seconds) ? $hours * 3600 + $minutes * 60 + $seconds : $hours * 60 + $minutes;

        $data = [
            'presupuesto_id' => $presupuesto_id,
            'tipo' => $new_linea['tipo_linea'],
            'paginas' => $new_linea['paginas'],
            'papel_id' => $new_linea['papel_generico_id'],
            'papel_impresion_id' => $new_linea['papel_impresion_id'],
            'formas' => $formas,
            'gramaje' => $new_linea['gramaje'],
            'pliegos_libro' => $new_linea['pliegos_libro'],
            'pliegos_pedido' => $new_linea['pliegos_pedido'],
            'pliegos_precio' => $new_linea['precios_pliegos'],
            'libro' => $new_linea['precio_libro'],
            'total_papel_pedido' => $new_linea['precio_pedido'],
            'margen_papel_pedido' => $new_linea['margen_papel_pedido'],
            'mano' => $new_linea['mano'],
            'peso' => $new_linea['peso'],
            'check_papel_total' => 1,
            'check_impresion_total' => 1,
            'maquina_id' => $new_linea['maquina_id'],
            'tiempo_maquina' => $tiempo,
            'tarifa_impresion_id' => $new_linea['tarifa_impresion_id'],
            'precio_click' => $new_linea['precio_click'],
            'precio_click_pedido' => $new_linea['precio_click_pedido'],
            'maquina' => $new_linea['maquina'],
            'papel_impresion' => $new_linea['papel_impresion'],
            'maquina_tipo' => $new_linea['tipo_maquina'],
            'horas_maquina' => $new_linea['horas_maquina'],
            'precio_hora' => $new_linea['precio_hora'],
            'precio_impresion' => $new_linea['precio_impresion_horas'],
            'total_linea' => $new_linea['total_impresion'],
            'margen_impresion' => $new_linea['margen_impresion_horas'],
            'margen_click_pedido' => $new_linea['margen_click_pedido'],
        ];

        if($new_linea['tipo_maquina'] =='inkjet'){
            $data += [
            'rotativa_total_impresion' => $rot_total_impresion,

            'rotativa_negro' => $new_linea['datosTipologias']->negro ?? 0,
            'rotativa_cyan' => $new_linea['datosTipologias']->cyan ?? 0,
            'rotativa_magenta' => $new_linea['datosTipologias']->magenta ?? 0,
            'rotativa_amarillo' => $new_linea['datosTipologias']->amarillo ?? 0,
            'rotativa_cg' => $new_linea['datosTipologias']->cg ?? 0,
            'rotativa_gota_negro' => $new_linea['datosTipologias']->gota_negro ?? 0,
            'rotativa_gota_color' => $new_linea['datosTipologias']->gota_color ?? 0,

            'rotativa_num_gotas_negro' => $new_linea['num_gotas_negro'] ?? 0,
            'rotativa_num_gotas_cyan' => $new_linea['num_gotas_cyan'] ?? 0,
            'rotativa_num_gotas_magenta' => $new_linea['num_gotas_magenta'] ?? 0,
            'rotativa_num_gotas_amarillo' => $new_linea['num_gotas_amarillo'] ?? 0,
            'rotativa_num_gotas_cg' => $new_linea['num_gotas_cg'] ?? 0,
            'rotativa_peso_gotas_negro' => $new_linea['peso_gotas_negro'] ?? 0,
            'rotativa_peso_gotas_cyan' => $new_linea['peso_gotas_cyan'] ?? 0,
            'rotativa_peso_gotas_magenta' => $new_linea['peso_gotas_magenta'] ?? 0,
            'rotativa_peso_gotas_amarillo' => $new_linea['peso_gotas_amarillo'] ?? 0,
            'rotativa_peso_gotas_cg' => $new_linea['peso_gotas_cg'] ?? 0,
            'rotativa_peso_gotas_negro_pedido' => $new_linea['peso_gotas_negro_pedido'] ?? 0,
            'rotativa_peso_gotas_cyan_pedido' => $new_linea['peso_gotas_cyan_pedido'] ?? 0,
            'rotativa_peso_gotas_magenta_pedido' => $new_linea['peso_gotas_magenta_pedido'] ?? 0,
            'rotativa_peso_gotas_amarillo_pedido' => $new_linea['peso_gotas_amarillo_pedido'] ?? 0,
            'rotativa_peso_gotas_cg_pedido' => $new_linea['peso_gotas_cg_pedido'] ?? 0,

            'rotativa_pag_color' => $new_linea['paginas_color'],
            'rotativa_resolucion' => $new_linea['resolucion'],
            'rotativa_area_paginas' => $new_linea['superficie'],
            'rotativa_precio_pag_negro' => $new_linea['precio_pagina_negro'],
            'rotativa_precio_pag_color' => $new_linea['precio_pagina_color'],
            'rotativa_factor_altura' => $new_linea['factor_altura'],
            'rotativa_factor_anchura' => $new_linea['factor_anchura'],
            'rotativa_pag_por_pliego' => $new_linea['paginas_por_pliego'],
            'rotativa_clicks_libro' => $new_linea['clicks_libro'],
            'rotativa_clicks_total' => $new_linea['clicks_pedido'],
            'rotativa_precio_tinta' => $new_linea['precio_tinta'],
            'rotativa_mxm' => $new_linea['maquina_velocidad'],
            ];
        }

        if (strpos($new_linea['tipo_linea'], 'rot') !== false) {
            $data += [
                'rotativa_metros_libro' => $new_linea['metros_papel_libro'],
                'rotativa_metros_total' => $new_linea['metros_papel_total'],
                'rotativa_velocidad_corte' => $new_linea['velocidad_corte'],
                'rotativa_precio_hora_corte' => $new_linea['precio_hora_corte'],
                'rotativa_tiempo_corte' => $new_linea['tiempo_corte'],
                'rotativa_total_corte' => $new_linea['total_corte'],
                'rotativa_a_favor_fibra' => $new_linea['a_favor_fibra']
            ];
        }

        if($new_linea['tipo_linea'] =='lp_guardas')
            $data = array_merge($data, ['paginas_impresion' => $new_linea['paginas_impresion']]);

        return $this->db
            ->table($this->table . " t1")
            ->set($data)
            ->insert();
    }


    public function deleteLineasPresupuesto($presupuesto_id)
    {
        $this->db
            ->table($this->table . " t1")
            ->where("presupuesto_id", $presupuesto_id)
            ->delete();
    }

    public function insertLineasPresupuesto($presupuesto_id = -1, $datos = [])
    {
        $this->deleteLineasPresupuesto($presupuesto_id);

        foreach ($datos as $linea) {

            $this->db
                ->table($this->table . " t1")
                ->where("t1.presupuesto_id", $presupuesto_id)
                ->insert($linea);
        }
    }

    public function getResourceByNForPdf($presupuesto_id = -1)
    {
        $builder = $this->db
            ->table($this->table . " t1")
            ->select(
                "t1.paginas AS paginas, t2.nombre AS papel, t1.gramaje AS gramaje"
            )
            ->where("t1.presupuesto_id", $presupuesto_id)
            ->join("lg_papel_generico t2", "t1.papel_id = t2.id", "left")
            ->whereIn('t1.tipo', ['lp_bn', 'lp_bnhq', 'lp_rot_bn']);

        return $builder;
    }

    public function getResourceColorForPdf($presupuesto_id = -1)
    {
        $builder = $this->db
            ->table($this->table . " t1")
            ->select(
                "t1.paginas AS paginas, t2.nombre AS papel, t1.gramaje AS gramaje"
            )
            ->where("t1.presupuesto_id", $presupuesto_id)
            ->join("lg_papel_generico t2", "t1.papel_id = t2.id", "left")
            ->whereIn('t1.tipo', ['lp_color', 'lp_colorhq', 'lp_rot_color']);

        return $builder;
    }

    public function getResourceCubiertaForPdf($presupuesto_id = -1)
    {
        $builder = $this->db
            ->table($this->table . " t1")
            ->select(
                "t1.paginas AS paginas, t2.nombre AS papel, t1.gramaje AS gramaje"
            )
            ->where("t1.presupuesto_id", $presupuesto_id)
            ->join("lg_papel_generico t2", "t1.papel_id = t2.id", "left")
            ->whereIn('t1.tipo', ['lp_cubierta']);

        return $builder;
    }

    public function getResourceSobrecubiertaForPdf($presupuesto_id = -1)
    {
        $builder = $this->db
            ->table($this->table . " t1")
            ->select(
                "t1.paginas AS paginas, t2.nombre AS papel, t1.gramaje AS gramaje"
            )
            ->where("t1.presupuesto_id", $presupuesto_id)
            ->join("lg_papel_generico t2", "t1.papel_id = t2.id", "left")
            ->whereIn('t1.tipo', ['lp_sobrecubierta']);

        return $builder;
    }

    public function getResourceGuardasForPdf($presupuesto_id = -1)
    {
        $builder = $this->db
            ->table($this->table . " t1")
            ->select(
                "t1.paginas AS paginas, t2.nombre AS papel, t1.gramaje AS gramaje"
            )
            ->where("t1.presupuesto_id", $presupuesto_id)
            ->join("lg_papel_generico t2", "t1.papel_id = t2.id", "left")
            ->whereIn('t1.tipo', ['lp_guardas']);

        return $builder;
    }

    public function getResourceFajaForPdf($presupuesto_id = -1)
    {
        $builder = $this->db
            ->table($this->table . " t1")
            ->select(
                "t1.papel_impresion AS papel, t1.gramaje AS gramaje"
            )
            ->where("t1.presupuesto_id", $presupuesto_id)
            ->whereIn('t1.tipo', ['lp_faja']);

        return $builder;
    }

    public function duplicateLineasPresupuesto($presupuesto_id, $new_presupuesto_id)
    {
        $lineas = $this->getLineasPresupuesto($presupuesto_id);
        $lineas = json_decode(json_encode($lineas), true);
        foreach ($lineas as $linea) {
            $linea['presupuesto_id'] = $new_presupuesto_id;
            unset($linea['id']);
            $this->db
                ->table($this->table . " t1")
                ->insert($linea);
        }
    }
}
