<?php

namespace App\Entities\Presupuestos;

use App\Models\Configuracion\MaquinaModel;
use CodeIgniter\Entity;
use App\Entities\Configuracion\Maquina as MaquinaEntity;
use App\Entities\Configuracion\MaquinasTarifasImpresionEntity;
use App\Entities\Configuracion\PapelGenerico;
use App\Entities\Configuracion\PapelImpresion;
use App\Entities\Tarifas\TarifapreimpresionEntity;
use App\Models\Configuracion\MaquinasTarifasImpresionModel;
use App\Models\Configuracion\PapelGenericoModel;
use App\Models\Configuracion\PapelImpresionModel;
use Config\LogoImpresion;

class PresupuestoLineaEntity extends \CodeIgniter\Entity\Entity
{
    protected $attributes = [
        "id" => null,
        "presupuesto_id" => null,
        "tipo" => null,
        "paginas" => 0,
        "paginas_impresion" => 0, //guardas
        "paginas_color_posicion" => null,
        "solapas_ancho" => 0.0,
        "papel_id" => null,
        "papel_impresion_id" => null,
        "formas" => null,
        "gramaje" => null,
        "pliegos_libro" => null,
        "pliegos_pedido" => null,
        "pliegos_precio" => null,
        "libro" => null,
        "pedido" => null,
        "mano" => null,
        "peso" => null,
        "maquina_id" => null,
        "tarifa_impresion_id" => null,
        "click" => null,
        "precio" => null,
        "total_papel_pedido" => null,
        "margen_papel_pedido" => null,
        "margen_impresion" => null,
        "rotativa_impresion" => null,
        "rotativa_pag_color" => 0,
        "rotativa_set_values" => false,
        "rotativa_negro" => 0.0,
        "rotativa_cyan" => 0.0,
        "rotativa_magenta" => 0.0,
        "rotativa_amarillo" => 0.0,
        "rotativa_gota_negro" => 0.0,
        "rotativa_gota_color" => 0.0,
        "rotativa_saturacion" => 100.0,
        "rotativa_a_favor_fibra" => true,
        "rotativa_mxm" => null,
        "rotativa_area_paginas" => null,
        "rotativa_num_gotas_negro" => 0,
        "rotativa_num_gotas_cyan" => 0,
        "rotativa_num_gotas_magenta" => 0,
        "rotativa_num_gotas_amarillo" => 0,
        "rotativa_peso_gotas_negro" => 0,
        "rotativa_peso_gotas_cyan" => 0,
        "rotativa_peso_gotas_magenta" => 0,
        "rotativa_peso_gotas_amarillo" => 0,
        "rotativa_precio_pag_negro" => null,
        "rotativa_precio_pag_color" => null,
        "rotativa_factor_altura" => null,
        "rotativa_factor_anchura" => null,
        "rotativa_pag_por_pliego" => null,
        "rotativa_metros_libro" => null,
        "rotativa_metros_total" => null,
        "rotativa_clicks_libro" => null,
        "rotativa_clicks_total" => null,
        "rotativa_precio_tinta" => null,
        "rotativa_total_impresion" => null,
        "rotativa_velocidad_corte" => 0,
        "rotativa_tiempo_corte" => 0,
        "rotativa_precio_hora_corte" => 0,
        "rotativa_total_corte" => 0,
        "check_impresion_total" => false,
        "check_papel_total" => false,
        "maquina" => null,
        "papel_impresion" => null,
        "maquina_tipo" => 'toner',
        "horas_maquina" => 0,
        "precio_hora" => 0,
        "precio_impresion" => 0,
        "total_linea" => 0,
    ];
    protected $casts = [
        "presupuesto_id" => "int",
        "paginas" => "int",
        "paginas_impresion" => "int", // guardas
        "solapas_ancho" => "float",
        "papel_id" => "?int",
        "papel_impresion_id" => "?int",
        "gramaje" => "?float",
        "pliegos_libro" => "?float",
        "pliegos_pedido" => "?float",
        "pliegos_precio" => "?float",
        "libro" => "?float",
        "pedido" => "?float",
        "mano" => "?float",
        "peso" => "?float",
        "maquina_id" => "?int",
        "tarifa_impresion_id" => "?int",
        "click" => "?float",
        "precio" => "?float",
        "total_papel_pedido" => "?float",
        "margen_papel_pedido" => "?float",
        "margen_impresion" => "?float",
        "rotativa_pag_color" => "int",
        "rotativa_set_values" => "boolean",
        "rotativa_negro" => "float",
        "rotativa_cyan" => "float",
        "rotativa_magenta" => "float",
        "rotativa_amarillo" => "float",
        "rotativa_gota_negro" => "float",
        "rotativa_gota_color" => "float",
        "rotativa_saturacion" => "float",
        "rotativa_a_favor_fibra" => "boolean",
        "rotativa_mxm" => "?float",
        "rotativa_area_paginas" => "float",
        "rotativa_num_gotas_negro" => "float",
        "rotativa_num_gotas_cyan" => "float",
        "rotativa_num_gotas_magenta" => "float",
        "rotativa_num_gotas_amarillo" => "float",
        "rotativa_peso_gotas_negro" => "float",
        "rotativa_peso_gotas_cyan" => "float",
        "rotativa_peso_gotas_magenta" => "float",
        "rotativa_peso_gotas_amarillo" => "float",
        "rotativa_precio_pag_negro" => "float",
        "rotativa_precio_pag_color" => "float",
        "rotativa_factor_altura" => "float",
        "rotativa_factor_anchura" => "float",
        "rotativa_pag_por_pliego" => "float",
        "rotativa_metros_libro" => "float",
        "rotativa_metros_total" => "float",
        "rotativa_clicks_libro" => "float",
        "rotativa_clicks_total" => "float",
        "rotativa_precio_tinta" => "float",
        "rotativa_total_impresion" => "float",
        "rotativa_velocidad_corte" => "float",
        "rotativa_tiempo_corte" => "float",
        "rotativa_precio_hora_corte" => "float",
        "rotativa_total_corte" => "float",
        "check_impresion_total" => "boolean",
        "check_papel_total" => "boolean",
        "horas_maquina" => "double",
        "precio_hora" => "double",
        "precio_impresion" => "double",
        "total_linea" => "double",
    ];

    /**
     * Devuelve la entity MaquinaEntity asociada a esta linea de presupuesto
     *
     * @return MaquinaEntity 
     */
    public function maquina(): MaquinaEntity
    {
        $m = model(MaquinaModel::class);
        return $m->find($this->attributes["maquina_id"]);
    }
    /**
     * Devuelve la entity PapelImpresion asociada a esta linea de presupuesto.
     *
     * @return PapelImpresion
     */
    public function papel_impresion(): PapelImpresion
    {
        $m = model(PapelImpresionModel::class);
        return $m->find($this->attributes['papel_impresion_id']);
    }
    /**
     * Devuelve la entity PapelGenerico asociada a esta linea de presupuesto.
     *
     * @return PapelGenerico
     */
    public function papel_generico(): PapelGenerico
    {
        $m = model(PapelGenericoModel::class);
        return $m->find($this->attributes['papel_id']);
    }
    /**
     * Devuelve la entity MaquinasTarifasImpresionEntity asociada a esta linea de presupuesto.
     *
     * @return MaquinasTarifasImpresionEntity
     */
    public function tarifa_impresion(): MaquinasTarifasImpresionEntity
    {
        $m = model(MaquinasTarifasImpresionModel::class);
        return $m->find($this->attributes['tarifa_impresion_id']);
    }

    public function get_impresion_logo(){
        $logo = config(LogoImpresion::class);
        return $logo->get_logo_path($this->attributes["tipo"]);
    }
    public function get_nombre_tarea() : ?string
    {
        $nombre = null;
        $impresion_bn = ["lp_bn","lp_bnhq","lp_rot_bn"];
        $impresion_color = ["lp_color","lp_colorhq","lp_rot_color"];
        $impresion_cubierta = ["lp_cubierta"];
        $impresion_guardas = ["lp_guardas"];
        $impresion_sobrecubierta = ["lp_sobrecubierta"];

        $is_bn = in_array($this->attributes["tipo"],$impresion_bn);
        $is_color = in_array($this->attributes["tipo"],$impresion_color);
        $is_impresion_cubierta = in_array($this->attributes["tipo"],$impresion_cubierta);
        $is_impresion_guarda = in_array($this->attributes["tipo"],$impresion_guardas);
        $is_impresion_sobrecubierta = in_array($this->attributes["tipo"],$impresion_sobrecubierta);

        if($is_bn) $nombre ="Impresión B/N";
        if($is_color) $nombre ="Impresión color";
        if($is_impresion_cubierta) $nombre ="Impresión cubierta";
        if($is_impresion_guarda) $nombre ="Impresión guarda";
        if($is_impresion_sobrecubierta) $nombre ="Impresión sobrecubierta";

        return $nombre;
    }
    public function isRotativa() : bool
    {   
        return in_array($this->attributes['tipo'],['lp_rot_color','lp_rot_bn']);
    }
    public function isColor():bool {
        return in_array($this->attributes['tipo'],['lp_color','lp_colorhq','lp_rot_color']);
        
    }
}
