<?php
require_once('./config/app/views.php');
require_once('./config/app/controller.php');
require_once('./models/Cajamodel.php');
 
class Caja extends controller
{       //INICIO DE SSECIO
    public function __construct()
    {
       
        
        SESSION_START();
        if (empty($_SESSION ['activo'])) {
           header("location:".base_url);
        }
         $this->model = new Cajamodel();
      
       
        

        parent::__construct();
    }

    public function index()
    {
        $id_user = (int)$_SESSION['id_usuario'];
        $verificar = $this->model->verificarPermiso($id_user, 'caja');
        if (!empty($verificar) || $id_user == 1 ) {  
            $this->views->getviews($this, "index");
        } else {
            header('Location: ' . base_url . 'errors/permisos');

        }
       
       
    }
    public function arqueo()
    {
        if (isset($_SESSION['id_usuario'])) {
            $id_user = $_SESSION['id_usuario'];
            $this->views->getviews($this, "arqueo", $id_user);
        } else {
            echo "La clave 'id_USER' no está establecida en la sesión.";
        }
    }
    



    public function listar()
    {
        $data = $this->model->getCaja('caja');
        for ($i = 0; $i < count($data); $i++) {
            if ($data[$i]['estado'] == 1) {
                $data[$i]['estado'] = '<span class="badge badge-success">activo</span>';
                $data[$i]['acciones'] = 
                '<div>
                <button class="btn btn-primary" type="button" onclick="btnEditarCaja(' . $data[$i]['id'] . ');"><i class="fas fa-edit"></i></button>
                <button class="btn btn-danger" type="button" onclick="EliminarCaja(' . $data[$i]['id'] . ');"><i class="fas fa-trash-alt"></i></button>
                </div>';
            } else {
                $data[$i]['estado'] = '<span class="badge badge-danger">suspendido</span>';
                $data[$i]['acciones'] = '<div>
             
                <button class="btn btn-success" type="button" onclick="btnReningresarCaja(' . $data[$i]['id'] . ');">Activar</button>
                </div>';
            }
           
        }
        echo json_encode($data, JSON_UNESCAPED_UNICODE);
        die();
    }
    public function listar_arqueo()
    {
        $data = $this->model->getCaja('arqueo_caja');
        for ($i = 0; $i < count($data); $i++) {
            if ($data[$i]['estado'] == 1) {
                $data[$i]['estado'] = '<span class="badge badge-success">Abierta</span>';
          
            } else {
                $data[$i]['estado'] = '<span class="badge badge-danger">Cerrado</span>';
            }
           
        }
        echo json_encode($data, JSON_UNESCAPED_UNICODE);
        die();
    }
    

    public function arqueo_caja()
    {
       
        $this->views->getviews($this, "arqueo_caja");
    }





    public function registrar()
    {
        $caja = $_POST['caja'];
        $id = $_POST['id'];
        if (empty($caja)) {
            $smg = "todos los campos son obligatorios";
        } else {
            if ($id == "") {

                    $data = $this->model->registrarCaja($caja,);
                    if ($data == "ok") {
                        $smg = "si";
                    } elseif ($data == "existe") {
                        $smg = "el dni ya existe";
                    } else {
                        $smg = "error al registrar el usuario";
                    }
                
            } else {
                $data = $this->model->modificarCaja($caja, $id);
                if ($data == "modificado") {
                    $smg = "modificado";
                } else {
                    $smg = "error al modificar el cliente";
                }
            }
        }
        echo json_encode($smg, JSON_UNESCAPED_UNICODE);
        die();
    }

    
    public function abrirArqueo()
    {
        $monto_inicial = $_POST['monto_inicial'];
        $fecha_apertura = date('Y-m-d'); 
        $id_usuario = (int)$_SESSION['id_usuario'];
        $id = $_POST['id'];
        $smg = array(); 
        if ($id_usuario <= 0) {
            $smg = array('msg' => 'Error: El ID de usuario no es válido.', 'icono' => 'error');
        } elseif (empty($monto_inicial)) {
            $smg = array('msg' => 'Todos los campos son obligatorios', 'icono' => 'error');
        } else {
            if ($id == '') {
                $data = $this->model->registrarArqueo($id_usuario, $monto_inicial, $fecha_apertura);
                if ($data == "ok") {
                    $smg = array('msg' => 'Caja aperturada', 'icono' => 'success');
                } elseif ($data == "existe") {
                    $smg = array('msg' => 'La Caja ya se aperturó', 'icono' => 'warning');
                } else {
                    $smg = array('msg' => 'Error', 'icono' => 'error');
                }
            } else {
                $monto_final = $this->model->getVentas($id_usuario);
                $total_ventas = $this->model->getTotalVentas($id_usuario);
                $inicial = $this->model->getMontoInicial($id_usuario);
                // he modificado para ingresar una suma total de compras
                $total_compras = $this->model->compraTotaless($id_usuario);
    
                // Asegurarse de que $monto_final y $inicial no sean nulos
                if ($monto_final !== null && $inicial !== null) {
                    $monto_final_str = (string)$monto_final['total'];
                    $monto_final_num = floatval($monto_final_str);
                    $inicial_num = floatval($inicial['monto_inicial']);
                    $total_compras_num = floatval($total_compras['total']); // Obtener el valor numérico de compras totales
    
                    $general = $monto_final_num + $inicial_num - $total_compras_num; // Utilizar el valor numérico de compras totales
    
                    $data = $this->model->actualizarArqueo(
                        $monto_final_str,
                        $fecha_apertura,
                        $total_ventas['total'],
                        $general,
                        strval($total_compras_num), // Convierte a cadena
                        (int)$inicial['id']
                    );
                    
                    // Actualizar las compras totales en la base de datos
                    $this->model->actualizarCompraTotal($id_usuario, $total_compras_num); // Pasar el valor numérico de compras totales
    
                    if ($data == "ok") {
                        $this->model->actualizarApertura($id_usuario);
                        $smg = array('msg' => 'LA CAJA ESTÁ CERRADA', 'icono' => 'success');
                    } else {
                        $smg = array('msg' => 'Error', 'icono' => 'error');
                    }
                } else {
                    $smg = array('msg' => 'Error: No se encontró el monto inicial o final', 'icono' => 'error');
                }
            }
        }
        
        echo json_encode($smg, JSON_UNESCAPED_UNICODE);
        die();
    }
    
    
 

    



    public function editar(int $id)
    {
        $data = $this->model->editarCaja($id);
        echo json_encode($data, JSON_UNESCAPED_UNICODE);
        die();
    }
    
    public function eliminar(int $id)
    {
        $data = $this->model->accionCaja(0, $id);
        if ($data == 1) {
            $smg = "ok";
        } else {
            $smg = "error al eliminar el dni";
        }
        echo json_encode($smg, JSON_UNESCAPED_UNICODE);
        die();
    }

    public function reingresar(int $id)
    {
        $data = $this->model->accionCaja(1, $id);
        if ($data == 1) {
            $smg = "ok";
        } else {
            $smg = "error al reingresar el dni";
        }
        echo json_encode($smg, JSON_UNESCAPED_UNICODE);
        die();
    }
    public function getVentas(){
        $id_usuario = isset($_SESSION['id_usuario']) ? intval($_SESSION['id_usuario']) : 0;
        $data['monto_total'] = $this->model->getVentas($id_usuario);
        $data['total_ventas'] = $this->model->getTotalVentas($id_usuario);
        $data['compras_totales'] = $this->model->compraTotaless($id_usuario);
        $data['inicial'] = $this->model->getMontoInicial($id_usuario);
    
        // Comprobación de si la caja está cerrada
        if ($data['monto_total'] === false || $data['total_ventas'] === false || $data['compras_totales'] === false || $data['inicial'] === false) {
            $alerta = array('msg' => 'La caja está cerrada', 'icono' => 'warning');
            echo json_encode($alerta, JSON_UNESCAPED_UNICODE);
        } else {
            // Cálculo del monto general si la caja no está cerrada
            $monto_total = $data['monto_total']['total'] ?? 0;
            $monto_inicial = $data['inicial']['monto_inicial'] ?? 0;
            $compras_totales = $data['compras_totales'] ?? 0;
            $data['monto_general'] = is_numeric($monto_total) && is_numeric($compras_totales) ? ($monto_total + $monto_inicial - $compras_totales) : 0;

           
            echo json_encode($data, JSON_UNESCAPED_UNICODE);
        }
        
        die();
    }
    


    public function RegisArqueo()
    {
        $cierre = $_POST['monto_inicialss'];
        $fecha = date('y-m-d'); 
        $id_user = (int)$_SESSION['id_usuario'];
        if (empty($cierre)) {
            $smg = "todos los campos son obligatorios";
        } else {
                    $data = $this->model->registrarCierreArca($id_user, $cierre,$fecha);
                    if ($data == "ok") {
                        $smg = "si";
                    }else {
                        $smg = "APERTURE CAJA";
                    }
            }
        echo json_encode($smg, JSON_UNESCAPED_UNICODE);
        die();


    }
    
   







    
// En el archivo `Caja.php`
























}
?>
