<?php

namespace App\Controllers;

use App\Controllers\BaseController;
use App\Controllers\Presupuestos\Importadorpresupuestos;
use App\Controllers\Presupuestos\Presupuestocliente;
use App\Models\Configuracion\MaquinasTarifasImpresionModel;
use App\Models\Configuracion\PapelGenericoModel;
use App\Models\Configuracion\MaquinaModel;
use App\Models\Presupuestos\ImportadorModel;
use App\Models\Presupuestos\PresupuestoModel;
use App\Models\Usuarios\GroupModel;
use App\Models\Catalogo\CatalogoLibroModel;
use App\Models\Catalogo\IdentificadorIskModel;
use App\Services\PresupuestoService;
use CodeIgniter\Shield\Entities\User;


class Test extends BaseController
{
    function __construct()
    {
    }

    public function echo()
    {

        echo "echo";

    }

    private function index()
    {

        $modelCL = new CatalogoLibroModel();
        $modelISK = new IdentificadorIskModel();

        // Obtener todos los registros sin isk
        $registros = $modelCL->where('isk', null)->findAll();

        $i = 0;
        foreach ($registros as $registro) {
            $isk = $modelISK->newIsk();

            $modelCL->update($registro->id, ['isk' => $isk]);

            echo "[" . $i++ . "]Asignado ISK {$isk} a ID {$registro->id}<br>";
        }


    }


    private function clonar_tarifa_encuadernacion($teOrigen, $teDestino)
    {

        $tet_model = model('App\Models\Tarifas\TarifaEncuadernacionTiradaModel');
        $tel_model = model('App\Models\Tarifas\TarifaEncuadernacionLineaModel');

        $tarifasTiradas = $tet_model->asObject()->where('tarifa_encuadernacion_id', $teOrigen)->findAll();

        foreach ($tarifasTiradas as $tarifasTirada) {

            echo "--->" . $tarifasTirada->id . "<br>";

            $tarifasLineas = $tel_model->asObject()->where('tirada_encuadernacion_id', $tarifasTirada->id)->findAll();

            // Prepare the data
            unset($tarifasTirada->id);
            $tarifasTirada->tarifa_encuadernacion_id = $teDestino;
            $tarifasTirada->created_at = date('Y-m-d H:i:s');
            $tarifasTirada->updated_at = date('Y-m-d H:i:s');
            //var_dump($tarifasTirada);

            // Insert it
            $tet_model->insert($tarifasTirada);
            $inserted_id = $tet_model->insertID();

            foreach ($tarifasLineas as $tarifasLinea) {

                echo "------>" . $tarifasLinea->id . "<br>";

                // Prepare the data
                unset($tarifasLinea->id);
                $tarifasLinea->tirada_encuadernacion_id = $inserted_id;
                $tarifasLinea->created_at = date('Y-m-d H:i:s');
                $tarifasLinea->updated_at = date('Y-m-d H:i:s');
                //var_dump($tarifasLinea);

                // Insert it
                $tel_model->insert($tarifasLinea);

            }
        }

    }



    private function test_get_tirada_alt(
        $tirada,
        $merma,
        $tipo_impresion_id,
        $json_data,
        $cliente_id,
        $ancho,
        $alto,
        $solapas_cubierta,
        $solapas_ancho_cubierta,
        $solapas_sobrecubierta,
        $solapas_ancho_sobrecubierta,
        $lomo
    ) {
        $values = [];

        if ($json_data) {

            $data = json_decode($json_data, true);

            foreach ($data as $linea) {
                echo '------------------------------------<br>';
                var_dump($linea);
                // Se obtienen los valores de cada linea para el calculo del precio
                $datosPedido = (object) array(
                    'paginas' => intval($linea['paginas']) ?? 0,
                    'tirada' => intval($tirada) ?? 0,
                    'merma' => intval($merma) ?? 0,
                    'ancho' => intval($ancho) ?? 100000,
                    'alto' => intval($alto) ?? 100000,
                    'a_favor_fibra' => $linea['aFavorFibra'] ?? 1,
                    'isCosido' => (new \App\Models\Configuracion\TipoPresupuestoModel())->get_isCosido($tipo_impresion_id), // JJO esto es custom por cada tipo de presupuesto
                );

                if ($linea['row_id'] == 'lp_guardas') {
                    $datosPedido->paginas_impresion = intval($linea['paginas_impresion']) ?? 0;
                    // Para el caso de Fresado y Cosido tapa dura, las guardas son un diptico
                    // y hay que imprimirlas como "cosido" (dos hojas pegadas). En el caso de espiral
                    // o wire-o tapa dura, las guardas se imprimen como hojas sueltas
                    if ($tipo_impresion_id == 1 || $tipo_impresion_id == 3) {
                        $datosPedido->isCosido = true;
                    } else if ($tipo_impresion_id == 5 || $tipo_impresion_id == 7) {
                        $datosPedido->isCosido = false;
                    }
                } else if ($linea['row_id'] == 'lp_sobrecubierta' || $linea['row_id'] == 'lp_cubierta') {
                    $datosPedido->solapas =
                        $linea['row_id'] == 'lp_cubierta' ? $solapas_cubierta : $solapas_sobrecubierta;
                    $datosPedido->solapas_ancho =
                        $linea['row_id'] == 'lp_cubierta' ? $solapas_ancho_cubierta : $solapas_ancho_sobrecubierta;
                    $datosPedido->lomo = $lomo;

                    $type = $linea['row_id'] == 'lp_cubierta' ? 'cubierta' : 'sobrecubierta';

                    $datosPedido->anchoExteriores = PresupuestoService::getAnchoTotalExteriores($type, $tipo_impresion_id, $datosPedido);
                    $datosPedido->altoExteriores = PresupuestoService::getAltoTotalExteriores($type, $tipo_impresion_id, $datosPedido);
                }

                $maquina = (new \App\Models\Configuracion\MaquinaModel())->find($linea['maquina_id']);
                $papel = (new \App\Models\Configuracion\PapelImpresionModel())->find($linea['papel_impresion_id']);
                $pg = (new \App\Models\Configuracion\PapelGenericoModel())->find($linea['papel']);
                $papel_generico['id'] = $pg->id;
                $papel_generico['nombre'] = $pg->nombre;

                $maquina->maquina_id = $maquina->id;
                unset($maquina->id);

                switch ($linea['row_id']) {
                    case 'lp_rot_bn':
                    case 'lp_rot_color':
                        $uso = 'rotativa';
                        $tipo = strpos($linea['row_id'], "_bn") !== false ? 'negro' : 'color';
                        break;
                    case 'lp_cubierta':
                        $uso = 'cubierta';
                        break;
                    case 'lp_sobrecubierta':
                        $uso = 'sobrecubierta';
                        break;
                    case 'lp_guardas':
                        $uso = 'guardas';
                        break;
                    default:
                        $uso = 'interior';
                        $isHq = strpos($linea['row_id'], "hq") !== false ? true : false;
                        $isColor = strpos($linea['row_id'], "_color") !== false ? true : false;
                        $tipo = $isColor ? ($isHq ? 'colorhq' : 'color') : ($isHq ? 'negrohq' : 'negro');
                        break;
                }

                if ($uso == 'cubierta' || $uso == 'sobrecubierta' || $uso == 'guardas') {
                    $isColor = true;
                    $isHq = true;
                    $tipo = 'colorhq';
                }



                $opciones_papel = PresupuestoService::get_opciones_papel($uso, $isColor);

                $datosTipolog = $linea['gotaNegro'] ?? null;
                if (!is_null($datosTipolog)) {
                    $datosTipolog = [];
                    $data = (object) array(
                        'negro' => intval($linea['cobNegro']) ?? 0,
                        'cyan' => intval($linea['cobCyan']) ?? 0,
                        'magenta' => intval($linea['cobMagenta']) ?? 0,
                        'amarillo' => intval($linea['cobAmarillo']) ?? 0,
                        'cg' => intval($linea['cobCG']) ?? 0,
                        'gota_negro' => intval($linea['gotaNegro']) ?? 0,
                        'gota_color' => intval($linea['gotaColor']) ?? 0,
                    );
                    array_push($datosTipolog, $data);
                }

                $data['uso'] = $uso;
                $data['tipo'] = $tipo;
                $data['datosPedido'] = $datosPedido;
                $data['cliente_id'] = $cliente_id;
                $data['papel'] = $papel;
                $data['opciones_papel'] = $opciones_papel;
                $data['maquina'] = $maquina;
                $data['papel_generico'] = (array) $papel_generico;
                $data['isColor'] = $isColor;
                $data['a_favor_fibra'] = $linea['aFavorFibra'] ?? null;
                $data['datosTipolog'] = $datosTipolog;
                $data['gramaje'] = $linea['gramaje'] ?? 0;


                if ($linea['row_id'] != 'lp_rot_bn' && $linea['row_id'] != 'lp_rot_color') {
                    $linea_coste = PresupuestoService::getLineaPresupuestoPlana($data);
                    var_dump($linea_coste);
                }

                if (empty($linea))
                    continue;

                array_push($values, $linea_coste);
            }
        } else {
            $values = [];
        }

    }


    private function asignar_tarifa_defecto_todos_usuarios()
    {

        // Previo a ejecutar, vaciar la tabla clientes_precios (ojo si hay customizaciones)

        $db = \Config\Database::connect();
        $builder = $db->table('cliente_precios');

        $plantillaDefectoId = 5;
        $clienteModel = model('App\Models\Clientes\ClienteModel');
        $platillaModel = model('App\Models\Clientes\ClientePlantillaPreciosLineasModel');

        $plantillaDefecto = $platillaModel->getResource($plantillaDefectoId)->get()->getResultObject();

        $clientes = $clienteModel->getResource()->get()->getResultObject();

        foreach ($clientes as $cliente) {

            foreach ($plantillaDefecto as $plantillaDefectoLinea) {

                $data = [
                    'plantilla_id' => $plantillaDefectoId,
                    'cliente_id' => $cliente->id,
                    'tipo' => $plantillaDefectoLinea->tipo,
                    'tipo_maquina' => $plantillaDefectoLinea->tipo_maquina,
                    'tipo_impresion' => $plantillaDefectoLinea->tipo_impresion,
                    'tiempo_min' => $plantillaDefectoLinea->tiempo_min,
                    'tiempo_max' => $plantillaDefectoLinea->tiempo_max,
                    'precio_hora' => $plantillaDefectoLinea->precio_hora,
                    'margen' => $plantillaDefectoLinea->margen,
                    'user_created_id' => 2,
                    'created_at' => date('Y-m-d H:i:s'),
                    'updated_at' => date('Y-m-d H:i:s'),
                ];

                /*echo '<pre>';
                var_dump($data);
                echo '</pre>';*/

                $builder->insert($data);
            }

            //break;

        }
    }


    public function init_presupuesto_encuadernacion($tipo_presupuesto, $solapas, $paginas, $tirada, $ancho, $alto, $POD)
    {
        $model = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel');
        return $model->initPresupuesto($tipo_presupuesto, $solapas, $paginas, $tirada, $ancho, $alto, $POD);
    }

    public function get_precio_tarifa($tarifa_encuadernacion_id, $paginas, $tirada, $ancho, $alto, $proveedor_id, $POD)
    {
        $model = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel');
        return $model->getPrecioTarifa($tarifa_encuadernacion_id, $paginas, $tirada, $ancho, $alto, $proveedor_id, $POD);
    }

    public function get_precio_tarifa_acabado($tarifa_id, $tirada, $POD)
    {
        $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
        return $model->getPrecioTarifa($tarifa_id, $tirada, $POD);
    }

    public function get_precio_tarifa_horas($tarifa_encuadernacion_id, $paginas, $tirada, $proveedor_id, $POD)
    {
        $model = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel');
        return $model->getPrecioTarifaHoras($tarifa_encuadernacion_id, $paginas, $tirada, $proveedor_id, $POD);
    }


    public function get_tarifa_enc($tarifa_id, $paginas, $tirada, $ancho, $alto)
    {
        $model = model('App\Models\Tarifas\TarifaEncuadernacionModel');
        return $model->getTarifaPresupuestoEncuadernacion($tarifa_id, $paginas, $tirada, $ancho, $alto);
    }

    public function getProveedoresForSelector_enc($tarifa_id, $paginas, $tirada, $ancho, $alto)
    {
        $model = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel');
        return $model->getProveedoresForSelector($tarifa_id, $paginas, $tirada, $ancho, $alto);
    }

    public function get_dimensiones_enc()
    {
        $dimensionModel = model('App\Models\Tarifas\TarifaEncuadernacionDimensionesModel');

        $dimensiones = $dimensionModel->getDimensiones();
        var_dump($dimensiones);
        foreach ($dimensiones as $dim) {
            $dim->label = lang("TarifaEncuadernacionLineas." . $dim->label);
        }
        var_dump($dimensiones);
    }


    public function get_tarifas_encuadernacion($tipo_presupuesto, $solapas)
    {
        $model = model('App\Models\Presupuestos\TipoPresupuestoTarifaEncuadernacionModel');
        return $model->get_tarifas($tipo_presupuesto, $solapas);
    }

    public function timeToSeconds()
    {
        $time = '99:59:59';

        $time_parts = explode(":", $time);
        $seconds = $time_parts[2] + $time_parts[1] * 60 + $time_parts[0] * 3600;
        echo "Time in seconds: " . $seconds;
    }

    public function getLP()
    {
        $lp_model = model('App\Models\Presupuestos\PresupuestoLineaModel');
        $data = $lp_model->getLineasPresupuesto(8);
        $papel_imp_model = model('App\Models\Configuracion\PapelImpresionModel');
        $maquina_model = model('App\Models\Configuracion\MaquinaModel');
        foreach ($data as $linea) {
            //$linea->papel_impresion_id = $papel_imp_model->getValue_Nombre($linea->papel_impresion_id)[0];
            //$linea->maquina_id = $maquina_model->getValue_Nombre($linea->maquina_id)[0];
            var_dump($linea->papel_impresion_id);
            var_dump($linea->maquina_id);
        }
    }

    public function createLP()
    {
        $lp_model = model('App\Models\Presupuestos\PresupuestoLineaModel');
        $lp_model->createForPresupuesto(8);
    }

    public function getPapelesHQ()
    {
        $model = model('App\Models\Configuracion\PapelGenericoModel');
        $data = $model->getPapelForComparador('colorhq', false, false);

        var_dump($data);
    }

    public function getPapelesCubierta()
    {
        $model = model('App\Models\Configuracion\PapelGenericoModel');
        $data = $model->getPapelForComparador('colorhq', true, false);

        var_dump($data);
    }

    public function getPapelesSobrecubierta()
    {
        $model = model('App\Models\Configuracion\PapelGenericoModel');
        $data = $model->getPapelForComparador('colorhq', false, true, false);

        var_dump($data);
    }

    public function getPapelesGuardas()
    {
        $model = model('App\Models\Configuracion\PapelGenericoModel');
        $data = $model->getPapelForComparador('color', false, false, false, true);

        var_dump($data);
    }

    public function getGramaje()
    {
        $model = new PapelGenericoModel();
        $data = $model->getGramajeComparador("AHUESADO OFFSET", "bnhq");

        var_dump($data);
    }

    public function testGetPrecioPliegoRotativa()
    {
        $paginas = 240;

        $papel_impresion = (object) array(
            'id' => 198,
            'gramaje' => 90,
            'precio_tonelada' => 1600
        );


        $maquina = (object) array(
            //'id' => 48,
            'alto' => 800,
            'ancho' => 520,
        );

        $precio = PresupuestoService::getPrecioPliego($maquina, $papel_impresion, $paginas);

        var_dump($precio);
    }

    public function testGetMaquinasFromTarifas()
    {
        $maquinamodel = new MaquinaModel();

        //$tarifa_tipo = ['negro', 'color'];
        //$tarifa_tipo = 'color';
        $tarifa_tipo = 'negro';
        $papel_impresion_id = 5;
        $maquina = $maquinamodel->getMaquinaImpresionForPresupuesto(1, $tarifa_tipo, 100, $papel_impresion_id);
        echo '<pre>';
        var_dump($maquina);
        echo '</pre>';
    }

    public static function testLineasIntPlana()
    {
        $uso = 'interior';
        $tipo = 'negro';
        $datosPedido = (object) array(
            'paginas' => 200,
            'tirada' => 500,
            'merma' => 10,
            'merma_portada' => 10,
            'ancho' => 150,
            'alto' => 210,
            'isCosido' => true,
        );

        $maquina_model = new \App\Models\Configuracion\MaquinaModel();

        $opciones_papel = array(
            'bn' => 1,
            'rotativa' => 0,
        );
        $papelimpresionmodel = new \App\Models\Configuracion\PapelImpresionModel();
        $papeles = $papelimpresionmodel->getIdPapelesImpresionForPresupuesto(
            papel_generico_id: 4,
            gramaje: 80,
            options: $opciones_papel
        );
        foreach ($papeles as $papel) {
            echo '-------------------------------';
            $maquinas = $maquina_model->getMaquinaImpresionForPresupuesto(
                is_rotativa: $papel->rotativa,
                tarifa_tipo: 'negro',
                uso_tarifa: 'interior',
                tirada: $datosPedido->tirada + $datosPedido->merma,
                papel_impresion_id: $papel->id,
            );

            foreach ($maquinas as $maquina) {

                echo '----------------------------<br>';
                var_dump($maquina->maquina);
                var_dump($papel->nombre);
                [$tarifaId, $tarifa] = (new \App\Models\Configuracion\MaquinasTarifasImpresionModel())->getTarifa($maquina->maquina_id, $uso, $tipo);
                $linea = PresupuestoService::getCostesLinea($uso, $datosPedido, $maquina, $papel, $opciones_papel, $tarifa);
                echo '<pre>';
                var_dump($linea);
                echo '</pre>';
            }
        }
    }


    public static function testLineasIntPlanaCubierta()
    {
        echo '<pre>';
        $uso = 'cubierta';
        $tipo = 'color';
        $datosPedido = (object) array(
            'paginas' => 200,
            'tirada' => 500,
            'merma' => 10,
            'merma_portada' => 10,
            'ancho' => 165,
            'alto' => 148,
            'isCosido' => true,
            'solapas' => 0,
            'solapas_ancho' => 0,
        );

        $maquina_model = new \App\Models\Configuracion\MaquinaModel();

        $opciones_papel = array(
            'color' => 1,
            'cubierta' => 1,
            'sobrecubierta' => 0,
            'rotativa' => 0,
        );
        $papelimpresionmodel = new \App\Models\Configuracion\PapelImpresionModel();
        $papeles = $papelimpresionmodel->getIdPapelesImpresionForPresupuesto(
            papel_generico_id: 3,
            gramaje: 100,
            options: $opciones_papel
        );
        foreach ($papeles as $papel) {
            echo '-------------------------------';
            var_dump($papel);
            $maquinas = $maquina_model->getMaquinaImpresionForPresupuesto(
                is_rotativa: $papel->rotativa,
                tarifa_tipo: 'color',
                tirada: $datosPedido->tirada + $datosPedido->merma_portada,
                papel_impresion_id: $papel->id,
            );

            foreach ($maquinas as $maquina) {

                echo '----------------------------<br>';
                var_dump($maquina->maquina);
                var_dump($papel->nombre);
                $tarifa = (new \App\Models\Configuracion\MaquinasTarifasImpresionModel())->getTarifa($maquina->maquina_id, $uso, $tipo);
                $linea = PresupuestoService::getCostesLinea($uso, $datosPedido, $maquina, $papel, $opciones_papel, $tarifa);

                var_dump($linea);
            }
        }
        echo '</pre>';
    }



    public static function testLineasIntRotativa()
    {

        $uso = 'interior';
        $tipo = 'negro';



        $datosPedido = (object) array(
            'paginas' => 240,
            'tirada' => 100,
            'merma' => 10,
            'merma_portada' => 10,
            'ancho' => 150,
            'alto' => 210,
            'isCosido' => true,
        );

        $parametrosRotativa = (object) array(
            'a_favor_fibra' => 0,
            'bnPages' => 240,
            'colorPages' => 0,
            'rotativa_gota_negro' => 0,
            'rotativa_gota_color' => 0,
        );

        $maquina_model = new \App\Models\Configuracion\MaquinaModel();

        $opciones_papel = array(
            'bn' => 1,
            'cubierta' => 0,
            'sobrecubierta' => 0,
            'rotativa' => 1,
        );
        $papelimpresionmodel = new \App\Models\Configuracion\PapelImpresionModel();
        $papeles = $papelimpresionmodel->getIdPapelesImpresionForPresupuesto(
            papel_generico_id: 4,
            gramaje: 90,
            options: $opciones_papel
        );


        foreach ($papeles as $papel) {

            $papelImpresionTipologiaModel = new \App\Models\Configuracion\PapelImpresionTipologiaModel();
            $datosTipologias = $papelImpresionTipologiaModel
                ->findTipologiasForPapelImpresion($papel->id, $parametrosRotativa->colorPages > 0 ? 'color' : 'negro')
                ->get()->getResultObject();
            echo '<pre>';
            var_dump($papel->id);
            var_dump($datosTipologias);
            echo '</pre>';

            $parametrosRotativa->rotativa_gota_negro = $datosTipologias[0]->gota_negro;
            $parametrosRotativa->rotativa_gota_color = $datosTipologias[0]->gota_color;
            $parametrosRotativa->rotativa_negro = $datosTipologias[0]->negro;
            $parametrosRotativa->rotativa_cyan = $datosTipologias[0]->cyan;
            $parametrosRotativa->rotativa_magenta = $datosTipologias[0]->magenta;
            $parametrosRotativa->rotativa_amarillo = $datosTipologias[0]->amarillo;

            echo '-------------------------------';
            $maquinas = $maquina_model->getMaquinaImpresionForPresupuesto(
                is_rotativa: $papel->rotativa,
                tarifa_tipo: 'negro',
                uso_tarifa: 'interiro',
                tirada: $datosPedido->tirada + $datosPedido->merma,
                papel_impresion_id: $papel->id,
            );



            foreach ($maquinas as $maquina) {

                echo '----------------------------<br>';
                var_dump($maquina->maquina);
                var_dump($papel->nombre);

                $linea = PresupuestoService::getCostesLineaRotativa($maquina, $datosPedido, $parametrosRotativa);
                echo '<pre>';
                var_dump($linea);
                echo '</pre>';
            }
        }
    }

    public static function testLineasCubierta()
    {
        $uso = 'cubierta';
        $tipo = 'color';

        $datosPedido = (object) array(
            'paginas' => 240,
            'tirada' => 100,
            'merma' => 10,
            'merma_portada' => 10,
            'ancho' => 150,
            'alto' => 210,
            'isCosido' => true,
            'solapas' => false,
        );

        $opciones_papel = array(
            'color' => 1,
            'cubierta' => 1,
        );


        // Se obtienen los papeles disponibles
        $papelimpresionmodel = new \App\Models\Configuracion\PapelImpresionModel();
        $papeles = $papelimpresionmodel->getIdPapelesImpresionForPresupuesto(
            papel_generico_id: 3, // Blanco offset
            gramaje: 100,
            options: $opciones_papel
        );

        echo '<pre>';
        var_dump($papeles);
        echo '</pre>';

        $lineas = array();
        // Para cada papel, se obtienen las maquinas disponibles
        foreach ($papeles as $papel) {

            $maquinamodel = new \App\Models\Configuracion\MaquinaModel();
            $maquinas = $maquinamodel->getMaquinaImpresionForPresupuesto(
                is_rotativa: 0,
                tarifa_tipo: $tipo,
                tirada: $datosPedido->tirada + $datosPedido->merma,
                papel_impresion_id: $papel->id,
            );

            echo '<pre>';
            echo '-------------------------------';
            echo '</pre>';

            echo '<pre>';
            var_dump($maquinas);
            echo '</pre>';

            // Se recorren las máquinas y se calcula el coste de linea por cada una
            foreach ($maquinas as $maquina) {

                echo '<pre>';
                echo '$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$';
                echo '</pre>';

                $tarifamodel = new \App\Models\Configuracion\MaquinasTarifasImpresionModel();
                $tarifa = $tarifamodel->getTarifa($maquina->maquina_id, $uso, $tipo);

                echo '<pre>';
                var_dump($tarifa);
                echo '</pre>';

                if (!is_float($tarifa)) {
                    continue;
                }
                $linea = PresupuestoService::getCostesLinea($uso, $datosPedido, $maquina, $papel, $opciones_papel, $tarifa);
                $linea['fields']['maquina'] = $maquina->maquina;
                $linea['fields']['maquina_id'] = $maquina->maquina_id;
                $linea['fields']['papel_impresion'] = $papel->nombre;
                $linea['fields']['papel_impresion_id'] = $papel->id;
                $linea['fields']['paginas'] = $datosPedido->paginas;
                $linea['fields']['gramaje'] = 100;
                $linea['fields']['papel_generico_id'] = 3;
                $linea['fields']['papel_generico'] = 'Blanco offset';

                array_push($lineas, $linea);
            }
        }

        echo '<pre>';
        var_dump($lineas);
        echo '</pre>';
    }

    public static function testLineasSobrecubierta()
    {
        $uso = 'sobrecubierta';
        $tipo = 'colorhq';

        $datosPedido = (object) array(
            'paginas' => 240,
            'tirada' => 100,
            'merma' => 10,
            'merma_portada' => 10,
            'ancho' => 150,
            'alto' => 210,
            'isCosido' => true,
            'solapas' => false,
        );

        $opciones_papel = array(
            'sobrecubierta' => 1,
            'rotativa' => 0,
        );


        // Se obtienen los papeles disponibles
        $papelimpresionmodel = new \App\Models\Configuracion\PapelImpresionModel();
        $papeles = $papelimpresionmodel->getIdPapelesImpresionForPresupuesto(
            papel_generico_id: 1, // Blanco offset
            gramaje: 200,
            options: $opciones_papel
        );

        echo '<pre>';
        var_dump($papeles);
        echo '</pre>';

        $lineas = array();
        // Para cada papel, se obtienen las maquinas disponibles
        foreach ($papeles as $papel) {

            $maquinamodel = new \App\Models\Configuracion\MaquinaModel();
            $maquinas = $maquinamodel->getMaquinaImpresionForPresupuesto(
                is_rotativa: 0,
                tarifa_tipo: $tipo,
                uso_tarifa: 'sobrecubierta',
                tirada: $datosPedido->tirada + $datosPedido->merma,
                papel_impresion_id: $papel->id,
            );

            echo '<pre>';
            echo '-------------------------------';
            echo '</pre>';

            echo '<pre>';
            var_dump($maquinas);
            echo '</pre>';

            // Se recorren las máquinas y se calcula el coste de linea por cada una
            foreach ($maquinas as $maquina) {

                echo '<pre>';
                echo '$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$';
                echo '</pre>';

                $tarifamodel = new \App\Models\Configuracion\MaquinasTarifasImpresionModel();
                $tarifa = $tarifamodel->getTarifa($maquina->maquina_id, $uso, $tipo);

                echo '<pre>';
                var_dump($tarifa);
                echo '</pre>';

                if (!is_float($tarifa)) {
                    continue;
                }
                $linea = PresupuestoService::getCostesLinea($uso, $datosPedido, $maquina, $papel, $opciones_papel, $tarifa);
                $linea['fields']['maquina'] = $maquina->maquina;
                $linea['fields']['maquina_id'] = $maquina->maquina_id;
                $linea['fields']['papel_impresion'] = $papel->nombre;
                $linea['fields']['papel_impresion_id'] = $papel->id;
                $linea['fields']['paginas'] = $datosPedido->paginas;
                $linea['fields']['gramaje'] = 100;
                $linea['fields']['papel_generico_id'] = 3;
                $linea['fields']['papel_generico'] = 'Blanco offset';

                array_push($lineas, $linea);
            }
        }

        echo '<pre>';
        var_dump($lineas);
        echo '</pre>';
    }
}
