<?php

namespace App\Controllers;

use App\Controllers\BaseController;
use App\Models\Configuracion\MaquinasTarifasImpresionModel;
use App\Models\Configuracion\PapelGenericoModel;
use App\Models\Configuracion\MaquinaModel;
use App\Models\Presupuestos\PresupuestoModel;
use App\Models\Usuarios\GroupModel;
use App\Models\Usuarios\PermisosModel;
use App\Services\PresupuestoService;
use CodeIgniter\Shield\Entities\User;

class Utiles extends BaseController
{
    function __construct()
    {
    }

    public function echo()
    {

        echo "echo";

    }

    public function index()
    {
        echo "ok";


    }


    public function get_tarifas_encuadernacion()
    {
        // Llamar al modelo
        $model = model('App\Models\Tarifas\TarifaEncuadernacionModel');

        // Obtener todos los resultados
        $results = $model->where(['is_deleted' => 0])->findAll();

        // Iterar sobre cada entidad
        echo '<pre>';
        foreach ($results as $result) {
            // Cada $result es una instancia de una entidad
            print_r($result->toArray());  // Convierte la entidad a un array para imprimir sus valores
        }
        echo '</pre>';
    }

    public function get_tarifa_encuadernacion($tarifaEncuadernacionId)
    {
        // Llamar a los modelos
        $modelTE = model('App\Models\Tarifas\TarifaEncuadernacionModel');
        $modelTELineas = model('App\Models\Tarifas\TarifaEncuadernacionLineaModel');
        $modelTELineasHoras = model('App\Models\Tarifas\TarifaEncuadernacionLineaHorasModel');
        $modelTETiradas = model('App\Models\Tarifas\TarifaEncuadernacionTiradaModel');


        // Obtener el registro principal de tarifa_encuadernacion
        $tarifas_encuadernacion = $modelTE->where([
            'id' => $tarifaEncuadernacionId,
            'is_deleted' => 0
        ])->findAll();

        // Verificar si se encontró la tarifa
        if (empty($tarifas_encuadernacion)) {
            echo "No se encontraron datos para la tarifa de encuadernación con ID: $tarifaEncuadernacionId.";
            return;
        }

        // Imprimir la tarifa de encuadernación principal
        echo "<h3>---------------------- DATO TARIFA ENCUADERNACION ----------------------</h3>";
        foreach ($tarifas_encuadernacion as $tarifa_encuadernacion) {
            echo "<strong>ID Tarifa: </strong>" . $tarifa_encuadernacion->id . "<br>";
            echo "<strong>Nombre: </strong>" . $tarifa_encuadernacion->nombre . "<br>";
            echo "<hr>";
        }

        // Obtener las tiradas asociadas a esta tarifa de encuadernación
        $tarifas_encuadernacion_tiradas = $modelTETiradas->where([
            'tarifa_encuadernacion_id' => $tarifaEncuadernacionId,
            'is_deleted' => 0
        ])->findAll();

        // Verificar si existen tiradas para la tarifa de encuadernación
        if (empty($tarifas_encuadernacion_tiradas)) {
            echo "No hay tiradas asociadas a esta tarifa de encuadernación.";
            return;
        }

        // Imprimir las tiradas asociadas
        echo "<h3>---------------------- DATO TARIFA ENCUADERNACION (TIRADAS) -------------</h3>";
        foreach ($tarifas_encuadernacion_tiradas as $tarifa_encuadernacion_tirada) {
            echo "<strong>ID Tirada: </strong>" . $tarifa_encuadernacion_tirada->id . "<br>";
            echo "<strong>Tirada Min: </strong>" . $tarifa_encuadernacion_tirada->tirada_min . "<br>";
            echo "<strong>Tirada Max: </strong>" . $tarifa_encuadernacion_tirada->tirada_max . "<br>";

            // Obtener las líneas asociadas a esta tirada
            $tarifas_encuadernacion_lineas = $modelTELineas->where([
                'tirada_encuadernacion_id' => $tarifa_encuadernacion_tirada->id,
                'is_deleted' => 0
            ])->findAll();

            // Verificar si existen líneas asociadas a la tirada
            if (empty($tarifas_encuadernacion_lineas)) {
                echo "No hay líneas asociadas a esta tirada de encuadernación.<br>";
            } else {
                // Imprimir las líneas asociadas
                echo "<ul>";
                foreach ($tarifas_encuadernacion_lineas as $tarifa_encuadernacion_linea) {
                    echo "<li><strong>ID Línea: </strong>" . $tarifa_encuadernacion_linea->id . "<br>";
                }
                echo "</ul>";
            }

            // Obtener las líneas y horas asociadas a esta tirada
            $tarifas_encuadernacion_lineas_horas = $modelTELineasHoras->where([
                'tirada_encuadernacion_id' => $tarifa_encuadernacion_tirada->id,
                'is_deleted' => 0
            ])->findAll();

            // Verificar si existen líneas y horas asociadas a la tirada
            if (empty($tarifas_encuadernacion_lineas_horas)) {
                echo "No hay líneas y horas asociadas a esta tirada de encuadernación.<br>";
            } else {
                // Imprimir las líneas asociadas
                echo "<ul>";
                foreach ($tarifas_encuadernacion_lineas_horas as $tarifas_encuadernacion_linea_hora) {
                    echo "<li><strong>ID Línea/Hora: </strong>" . $tarifas_encuadernacion_linea_hora->id . "<br>";
                }
                echo "</ul>";
            }

            echo "<hr>";
        }

        echo "<h3>---------------------- FIN DE DATO TARIFA ENCUADERNACION ----------------------</h3>";
    }

    public function delete_tarifa_encuadernacion($tarifaEncuadernacionId)
    {
        // Llamar a los modelos
        $modelTE = model('App\Models\Tarifas\TarifaEncuadernacionModel');
        $modelTELineas = model('App\Models\Tarifas\TarifaEncuadernacionLineaModel');
        $modelTELineasHoras = model('App\Models\Tarifas\TarifaEncuadernacionLineaHorasModel');
        $modelTETiradas = model('App\Models\Tarifas\TarifaEncuadernacionTiradaModel');

        // Obtener el registro principal de tarifa_encuadernacion
        $tarifas_encuadernacion = $modelTE->where([
            'id' => $tarifaEncuadernacionId,
            'is_deleted' => 0
        ])->findAll();

        // Verificar si se encontró la tarifa
        if (empty($tarifas_encuadernacion)) {
            echo "No se encontró la tarifa de encuadernación con ID: $tarifaEncuadernacionId.";
            return;
        }

        // Iniciar eliminación de datos asociados
        echo "Eliminando datos asociados a la tarifa de encuadernación ID: $tarifaEncuadernacionId...<br>";

        // Eliminar las tiradas asociadas a la tarifa de encuadernación
        $tarifas_encuadernacion_tiradas = $modelTETiradas->where([
            'tarifa_encuadernacion_id' => $tarifaEncuadernacionId,
            'is_deleted' => 0
        ])->findAll();

        if (!empty($tarifas_encuadernacion_tiradas)) {
            foreach ($tarifas_encuadernacion_tiradas as $tarifa_encuadernacion_tirada) {
                // Eliminar las líneas de horas asociadas a cada tirada
                $tarifas_encuadernacion_lineas_horas = $modelTELineasHoras->where([
                    'tirada_encuadernacion_id' => $tarifa_encuadernacion_tirada->id,
                    'is_deleted' => 0
                ])->findAll();

                if (!empty($tarifas_encuadernacion_lineas_horas)) {
                    foreach ($tarifas_encuadernacion_lineas_horas as $tarifa_encuadernacion_linea_hora) {
                        $modelTELineasHoras->delete($tarifa_encuadernacion_linea_hora->id);  // Eliminar la línea/hora
                        echo "===sk >-Eliminando Línea/Hora ID: " . $tarifa_encuadernacion_linea_hora->id . "<br>";
                    }
                }

                // Eliminar las líneas asociadas a cada tirada
                $tarifas_encuadernacion_lineas = $modelTELineas->where([
                    'tirada_encuadernacion_id' => $tarifa_encuadernacion_tirada->id,
                    'is_deleted' => 0
                ])->findAll();

                if (!empty($tarifas_encuadernacion_lineas)) {
                    foreach ($tarifas_encuadernacion_lineas as $tarifa_encuadernacion_linea) {
                        $modelTELineas->delete($tarifa_encuadernacion_linea->id);  // Eliminar la línea
                        echo "===>-Eliminando Línea ID: " . $tarifa_encuadernacion_linea->id . "<br>";
                    }
                }

                // Eliminar la tirada
                $modelTETiradas->delete($tarifa_encuadernacion_tirada->id);  // Eliminar la tirada
                echo "=>-Eliminando Tirada ID: " . $tarifa_encuadernacion_tirada->id . "<br>";
            }
        }

        echo " *** Proceso de eliminación completado. ***<br><br>";
    }

    public function clone_tarifa_encuadernacion($origenId, $destinoId)
    {
        // Llamar a los modelos
        $modelTETiradas = model('App\Models\Tarifas\TarifaEncuadernacionTiradaModel');
        $modelTELineas = model('App\Models\Tarifas\TarifaEncuadernacionLineaModel');
        $modelTELineasHoras = model('App\Models\Tarifas\TarifaEncuadernacionLineaHorasModel');

        // 1. Eliminar el contenido asociado de la tarifa destino
        $this->delete_tarifa_encuadernacion($destinoId);

        // 2. Obtener las tiradas asociadas a la tarifa origen
        $tiradasOrigen = $modelTETiradas->where([
            'tarifa_encuadernacion_id' => $origenId,
            'is_deleted' => 0
        ])->findAll();

        foreach ($tiradasOrigen as $tiradaOrigen) {
            // Crear un nuevo registro para la tirada en la tarifa destino
            $nuevaTirada = [
                'tarifa_encuadernacion_id' => (int) $destinoId,
                'proveedor_id' => (int)  $tiradaOrigen->proveedor_id,
                'importe_fijo' => (float) $tiradaOrigen->importe_fijo,
                'tirada_min' => (int) $tiradaOrigen->tirada_min,
                'tirada_max' => (int) $tiradaOrigen->tirada_max,
                'user_created_id' =>  (int) auth()->id(),
                'is_deleted' => 0
            ];

            try {
                $nuevaTiradaId = $modelTETiradas->insert($nuevaTirada);
                if (!$nuevaTiradaId) {
                    throw new \Exception("Error al insertar el registro.");
                }
                echo "<br>==>+Tirada creada con ID: " . $nuevaTiradaId;
            } catch (\Exception $e) {
                echo "Error: " . $e->getMessage();
            }

            // 3. Clonar las líneas asociadas a esta tirada
            $lineasOrigen = $modelTELineas->where([
                'tirada_encuadernacion_id' => $tiradaOrigen->id,
                'is_deleted' => 0
            ])->findAll();

            foreach ($lineasOrigen as $lineaOrigen) {
                $nuevaLinea = [
                    'tirada_encuadernacion_id' => (int) $nuevaTiradaId,
                    'paginas_libro_min' => (float) $lineaOrigen->paginas_libro_min,
                    'paginas_libro_max' => (float) $lineaOrigen->paginas_libro_max,
                    'dimensiones_id' => (int) $lineaOrigen->dimensiones_id,
                    'precio_min' => (float) $lineaOrigen->precio_min,
                    'precio_max' => (float) $lineaOrigen->precio_max,
                    'tirada_min' => (float) $lineaOrigen->tirada_min,
                    'tirada_max' => (float) $lineaOrigen->tirada_max,
                    'total_min' => (float) $lineaOrigen->total_min,
                    'margen' => (float) $lineaOrigen->margen,
                    'user_created_id' => (int)  auth()->id(),
                    'is_deleted' => 0
                ];

                try {
                    $nuevaLineaId = $modelTELineas->insert($nuevaLinea);
                    if (!$nuevaLineaId) {
                        throw new \Exception("Error al insertar el registro.");
                    }
                    echo "<br>====>+Linea creada con ID: " . $nuevaLineaId;
                } catch (\Exception $e) {
                    echo "Error: " . $e->getMessage();
                }

            }

            // 4. Clonar las líneas y horas asociadas a esta tirada
            $lineasHorasOrigen = $modelTELineasHoras->where([
                'tirada_encuadernacion_id' => $tiradaOrigen->id,
                'is_deleted' => 0
            ])->findAll();

            foreach ($lineasHorasOrigen as $lineaHoraOrigen) {
                $nuevaLineaHora = [
                    'tirada_encuadernacion_id' => (int) $nuevaTiradaId,
                    'tiempo_min' => (float) $lineaHoraOrigen->tiempo_min,
                    'tiempo_max' => (float) $lineaHoraOrigen->tiempo_max,
                    'precio_hora' => (float) $lineaHoraOrigen->precio_hora,
                    'total_min' => (float) $lineaHoraOrigen->total_min,
                    'margen' => (float) $lineaHoraOrigen->margen,
                    'user_created_id' => (int) auth()->id(),
                    'is_deleted' => 0
                ];

                try {
                    $nuevaLineaHoraId = $modelTELineasHoras->insert($nuevaLineaHora);
                    if (!$nuevaLineaHoraId) {
                        throw new \Exception("Error al insertar el registro.");
                    }
                    echo "<br>====>+Linea/Hora creado con ID: " . $nuevaLineaHoraId;
                } catch (\Exception $e) {
                    echo "Error: " . $e->getMessage();
                }

            }
        }

        echo "<br> *** Proceso de clonacion completado. ***<br><br>";
    }






}
