<?php

require_once('./config/app/views.php');
require_once('./config/app/controller.php');
require_once('./models/AdministracionModel.php');


class Administracion extends controller{
    public function __construct()
    {
        session_start();
        if (empty($_SESSION['activo'])) {
            header("location :" . base_url);
        } $this->model = new AdministracionModel();
        parent::__construct();


    }
    public function index() {
         if (isset($_SESSION['id_usuario'])) {

            $id_user = (int) $_SESSION['id_usuario'];
            $modulo = 3;

            $consultar_roles = $this->model->verificar_rol_user($id_user);
            $id_rol = $consultar_roles['id_rol'];

            $consultar_permiso = $this->model->permisos_roles($id_rol, $modulo);

            if (!empty($consultar_permiso)) {

            $data = $this->model->getEmpresa();
            $this->views->getviews($this, "index", $data);
            } else {

                // 🔴 cerrar sesión por falta de permisos
                session_unset();
                session_destroy();

                header('Location: ' . base_url);
                exit;
            }

        } else {

            // 🔴 cerrar sesión si no existe sesión válida
            session_unset();
            session_destroy();

            header('Location: ' . base_url);
            exit;
        }
    }

       public function reportes() {
         if (isset($_SESSION['id_usuario'])) {

            $id_user = (int) $_SESSION['id_usuario'];
            $modulo = 2;

            $consultar_roles = $this->model->verificar_rol_user($id_user);
            $id_rol = $consultar_roles['id_rol'];

            $consultar_permiso = $this->model->permisos_roles($id_rol, $modulo);

            if (!empty($consultar_permiso)) {

            $this->views->getviews($this, "reportes");
            } else {

                // 🔴 cerrar sesión por falta de permisos
                session_unset();
                session_destroy();

                header('Location: ' . base_url);
                exit;
            }

        } else {

            // 🔴 cerrar sesión si no existe sesión válida
            session_unset();
            session_destroy();

            header('Location: ' . base_url);
            exit;
        }
    }


   
    public function movimientos() {

        if (isset($_SESSION['id_usuario'])) {

            $id_user = (int) $_SESSION['id_usuario'];
            $modulo = 6;

            $consultar_roles = $this->model->verificar_rol_user($id_user);
            $id_rol = $consultar_roles['id_rol'];

            $consultar_permiso = $this->model->permisos_roles($id_rol, $modulo);

            if (!empty($consultar_permiso)) {

                $this->views->getviews($this, "movimientos");

            } else {

                // 🔴 cerrar sesión por falta de permisos
                session_unset();
                session_destroy();

                header('Location: ' . base_url);
                exit;
            }

        } else {

            // 🔴 cerrar sesión si no existe sesión válida
            session_unset();
            session_destroy();

            header('Location: ' . base_url);
            exit;
        }
    }

        public function config() {

        if (isset($_SESSION['id_usuario'])) {

            $id_user = (int) $_SESSION['id_usuario'];
            $modulo = 4;

            $consultar_roles = $this->model->verificar_rol_user($id_user);
            $id_rol = $consultar_roles['id_rol'];

            $consultar_permiso = $this->model->permisos_roles($id_rol, $modulo);

            if (!empty($consultar_permiso)) {

                $this->views->getviews($this, "config");

            } else {

                // 🔴 cerrar sesión por falta de permisos
                session_unset();
                session_destroy();

                header('Location: ' . base_url);
                exit;
            }

        } else {

            // 🔴 cerrar sesión si no existe sesión válida
            session_unset();
            session_destroy();

            header('Location: ' . base_url);
            exit;
        }
    }

      public function Finanzas() {

        if (isset($_SESSION['id_usuario'])) {

            $id_user = (int) $_SESSION['id_usuario'];
            $modulo = 4;

            $consultar_roles = $this->model->verificar_rol_user($id_user);
            $id_rol = $consultar_roles['id_rol'];

            $consultar_permiso = $this->model->permisos_roles($id_rol, $modulo);

            if (!empty($consultar_permiso)) {

                $this->views->getviews($this, "Finanzas");

            } else {

                // 🔴 cerrar sesión por falta de permisos
                session_unset();
                session_destroy();

                header('Location: ' . base_url);
                exit;
            }

        } else {

            // 🔴 cerrar sesión si no existe sesión válida
            session_unset();
            session_destroy();

            header('Location: ' . base_url);
            exit;
        }
    }


   public function historial() {

        if (isset($_SESSION['id_usuario'])) {

            $id_user = (int) $_SESSION['id_usuario'];
            $modulo = 7;

            $consultar_roles = $this->model->verificar_rol_user($id_user);
            $id_rol = $consultar_roles['id_rol'];

            $consultar_permiso = $this->model->permisos_roles($id_rol, $modulo);

            if (!empty($consultar_permiso)) {

                $this->views->getviews($this, "historial");

            } else {

                // 🔴 cerrar sesión por falta de permisos
                session_unset();
                session_destroy();

                header('Location: ' . base_url);
                exit;
            }

        } else {

            // 🔴 cerrar sesión si no existe sesión válida
            session_unset();
            session_destroy();

            header('Location: ' . base_url);
            exit;
        }
    }
    
    public function home() {
        $activos = $this->model->consultar_usuarios_ac();
        $inactivos = $this->model->consultar_usuarios_inac();
    
        $data = [
            'total_ac' => $activos['total_ac'],
            'total_inac' => $inactivos['total_inac']
        ];
        $this->views->getviews($this, "home", $data);
    }

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



    
    public function nuevos_user() {
        if (isset($_SESSION['id_usuario'])) {

            $id_user = (int) $_SESSION['id_usuario'];
            $modulo = 1;

            $consultar_roles = $this->model->verificar_rol_user($id_user);
            $id_rol = $consultar_roles['id_rol'];

            $consultar_permiso = $this->model->permisos_roles($id_rol, $modulo);

            if (!empty($consultar_permiso)) {
            $this->views->getviews($this, "nuevos_user");

            } else {

                // 🔴 cerrar sesión por falta de permisos
                session_unset();
                session_destroy();

                header('Location: ' . base_url);
                exit;
            }

        } else {

            // 🔴 cerrar sesión si no existe sesión válida
            session_unset();
            session_destroy();

            header('Location: ' . base_url);
            exit;
        }
  // Asegurar que la sesión esté iniciada
        if (session_status() === PHP_SESSION_NONE) {
            session_start();
        }
    
        // Verificar si el id de usuario existe y no está vacío
        if (isset($_SESSION['id_usuario']) && !empty($_SESSION['id_usuario'])) {
 } else {
            header('Location: ' . base_url . 'errors/permisos');
            exit(); // Importante para detener la ejecución después de redirigir
        }
       
    } 

 public function dispensadores() {
        if (isset($_SESSION['id_usuario'])) {

            $id_user = (int) $_SESSION['id_usuario'];
            $modulo = 5;

            $consultar_roles = $this->model->verificar_rol_user($id_user);
            $id_rol = $consultar_roles['id_rol'];

            $consultar_permiso = $this->model->permisos_roles($id_rol, $modulo);

            if (!empty($consultar_permiso)) {
            $this->views->getviews($this, "dispensadores");

            } else {

                // 🔴 cerrar sesión por falta de permisos
                session_unset();
                session_destroy();

                header('Location: ' . base_url);
                exit;
            }

        } else {

            // 🔴 cerrar sesión si no existe sesión válida
            session_unset();
            session_destroy();

            header('Location: ' . base_url);
            exit;
        }
  // Asegurar que la sesión esté iniciada
        if (session_status() === PHP_SESSION_NONE) {
            session_start();
        }
    
        // Verificar si el id de usuario existe y no está vacío
        if (isset($_SESSION['id_usuario']) && !empty($_SESSION['id_usuario'])) {
 } else {
            header('Location: ' . base_url . 'errors/permisos');
            exit(); // Importante para detener la ejecución después de redirigir
        }
       
    }









    
    
        public function fecha_actual() {
            // Zona horaria de Perú
            date_default_timezone_set('America/Lima');

            // Formato de fecha actual (ejemplo: 2025-08-14)
            $fecha = date('Y-m-d');
          

            // Devolver en JSON
            echo json_encode($fecha, JSON_UNESCAPED_UNICODE);
            die();
        }
        public function lista_de_roles(){
            $lista_roles = $this->model->lista_de_roles();
            echo json_encode($lista_roles, JSON_UNESCAPED_UNICODE);
        }

        
        public function registrar_user(){
            date_default_timezone_set('America/Lima');
            $fecha = date('Y-m-d');
            $hora = date('H:i:s');   

            $nombre   = $_POST['nombre'];
            $apellidos = $_POST['apellidos'];
            $dni      = $_POST['dni'];
            $celular  = $_POST['celular'];
            $id_rol   = $_POST['rol'];
            $usuario  = $_POST['usuario'];
            $clave    = $_POST['clave'];

            // Verificar si el DNI ya existe
            $verificar_dni_activo = $this->model->dni_activo($dni);

            // Si existe, evaluamos el estado
            if ($verificar_dni_activo && isset($verificar_dni_activo['estado'])) {
                if ($verificar_dni_activo['estado'] == 1) {
                    echo json_encode("existe", JSON_UNESCAPED_UNICODE);
                    exit;
                } elseif ($verificar_dni_activo['estado'] == 0) {
                    echo json_encode("inabilitado", JSON_UNESCAPED_UNICODE);
                    exit;
                }
            }

            // Si no existe el DNI, registramos
            $registrar = $this->model->registrar_nuevo_user( $usuario, $nombre, $apellidos, $fecha, $hora, $clave, $dni, $celular, $id_rol);

            if ($registrar == 1) {
                echo json_encode("si", JSON_UNESCAPED_UNICODE);
            } else {
                echo json_encode("no", JSON_UNESCAPED_UNICODE);
            }
            exit;
        }
    
        public function listas_ususarios(){
            $lista_usuario = $this->model->mostrar_usuarios();
            echo json_encode($lista_usuario, JSON_UNESCAPED_UNICODE);
        }
            public function consultar_user($id_user){
            $consultar_datos_user = $this->model->consulta_user($id_user);
            header('Content-Type: application/json');
            echo json_encode($consultar_datos_user, JSON_UNESCAPED_UNICODE);
            exit;
        }
        public function Corregir_user(){
            $id_user   = $_POST['id_editar_user'];
            $nombre   = $_POST['nombre'];
            $apellidos = $_POST['apellidos'];
            $dni      = $_POST['dni'];
            $celular  = $_POST['celular'];
            $id_rol   = $_POST['rol'];
            $usuario  = $_POST['usuario'];
            $clave    = $_POST['clave'];
            $corregir = $this->model->datos_para_corregir($id_user, $nombre, $apellidos, $dni, $celular, $id_rol, $usuario, $clave);
            if ($corregir == 1) {
               $res = "ok";
               echo json_encode($res, JSON_UNESCAPED_UNICODE);
               exit;
            }else {
                $res = "ERROR";
                 echo json_encode($res, JSON_UNESCAPED_UNICODE);
               exit;
            }
        }
        public function lista_user_eliminados(){
            $datos_eliminados = $this->model->lista_de_eliminados();
            if ($datos_eliminados == "") {
              $res = "vacio";
              echo json_encode($res, JSON_UNESCAPED_UNICODE);
              exit;
            }else {
                echo json_encode($datos_eliminados, JSON_UNESCAPED_UNICODE);
                exit;
            }
        }
        public function listar_modulos(){
            $modulos = $this->model->lista_modulos();
            echo json_encode($modulos, JSON_UNESCAPED_UNICODE);
            exit;
        }
        public function cargar_rol(){
            $rol_nuevo = $_POST['rol_nuevo'] ?? '';
            $modulos_json = $_POST['modulos'] ?? '[]';
            $modulos = json_decode($modulos_json, true);
            if ($rol_nuevo === '' || empty($modulos)) {
                echo json_encode("error");
                exit;
            }
            $enviar_datos = $this->model->cargar_roles_modulos($rol_nuevo, $modulos);
            echo json_encode($enviar_datos);
            exit;
        }
        public function usuarios_eliminados_lista() {
            $eliminados = $this->model->usuarios_eliminados();
            echo json_encode($eliminados, JSON_UNESCAPED_UNICODE);
            exit;
        }
        public function reingresar_user_activo($id_user){
            $estado = 1;
            $reingresar = $this->model->activar_usuario($estado, $id_user);
            if ($reingresar == 1) {
               $res = "ok";
            }else {
                $res = "error";
            }
            echo json_encode($res, JSON_UNESCAPED_UNICODE);
            exit();
        }
          public function eliminar_user_list($id_user){
            $estado = 0;
            $reingresar = $this->model->desactivar_user($estado, $id_user);
            if ($reingresar == 1) {
               $res = "ok";
            }else {
                $res = "error";
            }
            echo json_encode($res, JSON_UNESCAPED_UNICODE);
            exit();
        }
        public function usuario_detalle($id_user){
            $consulta = $this->model->detalles_usuarios($id_user);
            echo json_encode($consulta, JSON_UNESCAPED_UNICODE);
            exit;
        }
        public function lista_medios_pagos(){
    $lista_mediios_pagos = $this->model->medios_pagos();
    echo json_encode($lista_mediios_pagos, JSON_UNESCAPED_UNICODE);
    exit;
}
public function actualizar_medios_pagos($id_medios){
   $medio_actual = $_POST['input_value'];
   $actualizar = $this->model->actualizar_medis_actual($medio_actual, $id_medios);
   if ($actualizar == 1) {
        $res = "ok";
   }else {
    $res = "error";
   }
   echo json_encode($res, JSON_UNESCAPED_UNICODE);
   exit;
    
}


public function nuevo_medio_pago(){
    $nuevo_pago = $_POST['nuevo_pago'];
    if ($nuevo_pago == "") {
       $res = "Ingrese un nombre de medio de pago";
        echo json_encode($res ,JSON_UNESCAPED_UNICODE);
        exit;
    }else {
            $registrar = $this->model->nuevo_pago($nuevo_pago);
            if ($registrar == 1) {
                $res = "ok";
            }else {
                $res = "error";
            }
            echo json_encode($res ,JSON_UNESCAPED_UNICODE);
            exit;
    }
}

public function eliminar_medio($id){
    $eliminar = $this->model->eliminar_medios($id);
    if ($eliminar == 1) {
       $res = "ok";
    }else {
        $res = "error";
    }
    echo json_encode($res, JSON_UNESCAPED_UNICODE);
    exit;
    
}
public function consultar_dispensadores(){
    $datos_dispensador = $this->model->consultar_dispensadores();
    echo json_encode($datos_dispensador, JSON_UNESCAPED_UNICODE);
    exit;
}


public function iniciar_dispensador($isla)
{ 
    date_default_timezone_set('America/Lima');
    $fecha = date('Y-m-d');
    $id_user = (int) $_SESSION['id_usuario'];
    $ladoA = json_decode($_POST['ladoA'], true);
    $ladoB = json_decode($_POST['ladoB'], true);
    $turno = isset($_POST['turno']) ? (int)$_POST['turno'] : 0;
    $verificar_cierre_de_caja = $this->model->ver_cierre_de_caja();
    $verificar_registro = $this->model->verificar_lista_de_inicio($isla, $turno, $fecha);

    if ($verificar_registro) {
        echo json_encode(
            "YA SE INICIÓ EL DISPENSADOR. HUBO DEMORA DEL SERVIDOR, O SELECCIONE OTRO TURNO",
            JSON_UNESCAPED_UNICODE
        );
        exit;
    }
      if ($verificar_cierre_de_caja['arqueo'] == 1) {
       $res = "cerrar";
       echo json_encode($res, JSON_UNESCAPED_UNICODE);
       exit;
    }
   $validar =  $this->model->verificar_apertura_dispensadores(1);
   $numero_estado = $validar['cantidad'];
   if ($numero_estado == 1 || $numero_estado == 2 || $numero_estado == 3 || $numero_estado == 4) {
       $click = 1; 
       $estado_numero = $this->model->consulta_cantidades(1);
       $cantidad = $estado_numero['cantidad'];
       $sumar = $click + $cantidad;
       $actualizar = $this->model->actualizar_datos($sumar, 1);
     //validar con if si supera el numero 3 
        if ($sumar == 4) {
           $actualisar_cierrre_dispensador = $this->model->actualizar_apertura_dispensador_1();
          
           $actualisar_apertura_dispensador = $this->model->actualizar_cierre_dispensador();
        }
    

          $datos_dispensador = $this->model->consultar_dispensadores();

    foreach ($datos_dispensador as $disp) {
        $registrar = $this->model->guardar_seguridad_dispensador($disp);

        if ($registrar != 1) {
            echo json_encode("error_seguridad");
            return;
        }
    }

 

    foreach ($ladoA as $disp) {
        $id = $disp['id'];
        $numeracion = $disp['numeracion'];
        $data = $this->model->obtenerCombustible($id);

        $this->model->registrar_inicio(
            $isla,
            'A',
            $data['combustible'],
            $numeracion,
            $turno,
            $id_user,
            $id
        );

        $this->model->actualizarNumeracion($id, $turno);
    }

    foreach ($ladoB as $disp) {
        $id = $disp['id'];
        $numeracion = $disp['numeracion'];
        $data = $this->model->obtenerCombustible($id);

        $this->model->registrar_inicio(
            $isla,
            'B',
            $data['combustible'],
            $numeracion,
            $turno,
            $id_user,
            $id
        );

        $this->model->actualizarNumeracion($id, $turno);
    }

    echo json_encode("ok", JSON_UNESCAPED_UNICODE);



    # code...
   }else {
    $res = "LO CENTIMOS TERMINE DE CERRAR LOS DISPENSADORES PARA INICIAR";
    
    echo json_encode($res, JSON_UNESCAPED_UNICODE);
   }
 
}




public function cerrar_dispensador($isla)
{
        date_default_timezone_set('America/Lima');
    $fecha = date('Y-m-d');
    $hora  = date('H:i:s');
    $id_user = (int) $_SESSION['id_usuario'];
    $ladoA = json_decode($_POST['ladoA'], true);
    $ladoB = json_decode($_POST['ladoB'], true);
    $turno = isset($_POST['turno']) ? (int)$_POST['turno'] : 0;
    $verificar_registro = $this->model->verificar_lista_de_cierre($isla, $turno, $fecha);

    if ($verificar_registro) {
        echo json_encode(
            "YA SE INICIÓ EL DISPENSADOR. HUBO DEMORA DEL SERVIDOR, O SELECCIONE OTRO TURNO",
            JSON_UNESCAPED_UNICODE
        );
        exit;
    }
     $validar =  $this->model->verificar_apertura_dispensadores(2);
     $numero_estado = $validar['cantidad'];
     if ($numero_estado == 0) {
           $res = "LO CENTIMOS TERMINE DE INICIAR LOS DISPENSADORES PARA CERRAR";
    echo json_encode($res, JSON_UNESCAPED_UNICODE);
    exit;
     }
    $max_id_ventas = $this->model->seleccionar_maximo_id_ventas($id_user, $turno);
        $id_ventas = $max_id_ventas['ultimo_id'];

        if ($id_ventas == null) {

            $insertar_ventas = $this->model->insertar_datos_ventas($id_user, $turno, $fecha);

            if ($insertar_ventas == 1) {

                $max_id_ventas = $this->model->seleccionar_maximo_id_ventas($id_user, $turno);
                $id_ventas = $max_id_ventas['ultimo_id'];

            }

        }
  
    $this->model->preparar_apertura(1);
    $turno = isset($_POST['turno']) ? (int)$_POST['turno'] : 0;
       $click = 1; 
       $estado_numero = $this->model->consulta_cantidades(2);
       $cantidad = $estado_numero['cantidad'];
        $sumar = $click + $cantidad;
       $actualizar = $this->model->actualizar_datos($sumar, 2);
     //validar con if si supera el numero 3 
        if ($sumar == 4) {
           $actualisar_apertura_dispensador = $this->model->actualizar_apertura_dispensador();
           $actualisar_cierre_dispensador = $this->model->actualizar_cierre_dispensador_1();
        }
     
    // ===== LADO A =====
    foreach ($ladoA as $disp) {

        $id = $disp['id'];
        $numeracion = $disp['numeracion'];
        $data = $this->model->obtenerCombustible($id);

        // historia
        $this->model->Registrar_historia(
            $isla,
            'A',
            $data['combustible'],
            $numeracion,
            $turno,
            $id_user,
            $id
        );

        // cierre
        $this->model->actualizarNumeracion_cierre($id, $numeracion, $turno);

        // cálculos
        $mayor = $this->model->consultar_detalles_islas($id);
        $menor = $this->model->consultar_detalles_islas_2($id);
        $precio_data = $this->model->precio_combustible($data['combustible']);

        $numeracion_mayor = $mayor['numeracion'];
        $numeracion_menor = $menor['numeracion'];
        $precio = $precio_data['precio'];

        $galones = $numeracion_mayor - $numeracion_menor;
        $total   = $galones * $precio;

        // detalle venta
        $this->model->detalles_de_ventas(
            $isla,
            'A',
            $data['combustible'],
            $numeracion_menor,
            $numeracion_mayor,
            $galones,
            $total,
            $precio,
            $turno,
            $fecha,
            $hora,
            $id_user,
            $id_ventas

        );
    }

    // ===== LADO B =====
    foreach ($ladoB as $disp) {

        $id = $disp['id'];
        $numeracion = $disp['numeracion'];
        $data = $this->model->obtenerCombustible($id);

        $this->model->Registrar_historia(
            $isla,
            'B',
            $data['combustible'],
            $numeracion,
            $turno,
            $id_user,
            $id
        );

        $this->model->actualizarNumeracion_cierre($id, $numeracion, $turno);

        $mayor = $this->model->consultar_detalles_islas($id);
        $menor = $this->model->consultar_detalles_islas_2($id);
        $precio_data = $this->model->precio_combustible($data['combustible']);

        $numeracion_mayor = $mayor['numeracion'];
        $numeracion_menor = $menor['numeracion'];
        $precio = $precio_data['precio'];

        $galones = $numeracion_mayor - $numeracion_menor;
        $total   = $galones * $precio;

        $this->model->detalles_de_ventas(
            $isla,
            'B', // ✅ AQUÍ ESTABA EL ERROR ANTES
            $data['combustible'],
            $numeracion_menor,
            $numeracion_mayor,
            $galones,
            $total,
            $precio,
            $turno,
            $fecha,
            $hora,
            $id_user,
            $id_ventas
        );
    }

    echo json_encode("ok", JSON_UNESCAPED_UNICODE);
}

public function lista_de_resultados($isla){
    $resultados = $this->model->datos_consultas($isla);
    echo json_encode($resultados, JSON_UNESCAPED_UNICODE);
    exit;
}

public function combustibles_detalles(){
    $datos = $this->model->combustibles();
    echo json_encode($datos, JSON_UNESCAPED_UNICODE);
    exit;
}

public function cambiar_diesel_precio($id){
  $precio_diesel = $_POST['precio_diesel'];
  $actualizar = $this->model->precio_actualizar($precio_diesel, $id);
  if ($actualizar == 1) {
    # code...
    $res = "ok";
  }else {
    $res = "No se pudo corregir el diesel";
  }
    echo json_encode($res, JSON_UNESCAPED_UNICODE);
    exit;
}



public function cambiar_diesel_regular($id){
  $precio_diesel = $_POST['precio_regular'];
  $actualizar = $this->model->precio_actualizar($precio_diesel, $id);
  if ($actualizar == 1) {
    # code...
    $res = "ok";
  }else {
    $res = "No se pudo corregir el diesel";
  }
    echo json_encode($res, JSON_UNESCAPED_UNICODE);
    exit;
}

public function cambiar_diesel_primiun($id){
      $precio_diesel = $_POST['precio_primiun'];
  $actualizar = $this->model->precio_actualizar($precio_diesel, $id);
  if ($actualizar == 1) {
    # code...
    $res = "ok";
  }else {
    $res = "No se pudo corregir el diesel";
  }
    echo json_encode($res, JSON_UNESCAPED_UNICODE);
    exit;
}

public function cambiar_diesel_glp($id){
      $precio_diesel = $_POST['precio_glp'];
  $actualizar = $this->model->precio_actualizar($precio_diesel, $id);
  if ($actualizar == 1) {
    # code...
    $res = "ok";
  }else {
    $res = "No se pudo corregir el diesel";
  }
    echo json_encode($res, JSON_UNESCAPED_UNICODE);
    exit;
}


public function enviar_nuevo_stock($id){
      $precio_diesel = $_POST['precio_glp'];
  $actualizar = $this->model->actualizar_estock($precio_diesel, $id);
  if ($actualizar == 1) {
    # code...
    $res = "ok";
  }else {
    $res = "No se pudo corregir el diesel";
  }
    echo json_encode($res, JSON_UNESCAPED_UNICODE);
    exit;
}


public function datos_graficos(){

    $datos = $this->model->combustibles();
    $resultado = array();

    foreach ($datos as $row) {

        $stock = floatval($row["galones"]);
        $capacidad = floatval($row["capacidad"]);

        $porcentaje = 0;

        if ($capacidad > 0) {
            $porcentaje = ($stock / $capacidad) * 100;
        }

        $resultado[] = array(
            "id" => $row["id"],
            "nombre" => $row["nombre"],
            "stock" => $stock,
            "capacidad" => $capacidad,
            "porcentaje" => round($porcentaje, 2)
        );
    }

    echo json_encode($resultado, JSON_UNESCAPED_UNICODE);
}


public function resultadas_A_isla_1(){
    $total_regular = $this->model->isla_1_REGULAR();
    $total_diesel = $this->model->isla_1_DIESEL();
    $isla_2_diesel = $this->model->isla_2_DIESEl();
    $isla_2_regular = $this->model->isla_2_regular();
    $isla_2_primiun = $this->model->isla_2_primiun();
    $isla_3_GLP = $this->model->isla_3_GLP();
       $datos[] = array(
            "isla_1_diesel" => $total_diesel["isla_1_diesel"],
            "isla_1_regular" => $total_regular["isla_1_regular"],
            "isla_2_diesel" => $isla_2_diesel["isla_2_diesel"],
            "isla_2_regular" => $isla_2_regular["isla_2_regular"],
            "total_primiun" => $isla_2_primiun["total_primiun"],
            "isla_3_glp" => $isla_3_GLP["isla_3_glp"],
        );

    echo json_encode($datos, JSON_UNESCAPED_UNICODE);
    exit;
}


public function ventas_por_isla(){
    $isla_1 = $this->model->total_venta_isla1();
    $isla_2 = $this->model->total_venta_isla2();
    $isla_3 = $this->model->total_venta_isla3();
    $total = $this->model->total_ventas_general();
    $diesel_total = $this->model->diesel_total();
    $regular_total = $this->model->regular_total();
    $primiun_total = $this->model->primiun_total();
    $glp_total = $this->model->glp_total();
     $datos[] = array(
            "isla_1" => $isla_1["ventas_1"],
            "isla_2" => $isla_2["ventas_2"],
            "isla_3" => $isla_3["ventas_3"],
            "total_ventas" => $total["total_ventas"],
            "diesel" => $diesel_total["diesel"],
            "regular" => $regular_total["regular"],
            "primium" => $primiun_total["primiun"],
            "glp" => $glp_total["glp"],
        );
        echo json_encode($datos, JSON_UNESCAPED_UNICODE);
        exit;
}
public function mostrar_medios_lista(){
    $datos = $this->model->mostrar_medios_de_pagos();
    echo json_encode($datos, JSON_UNESCAPED_UNICODE);
    exit;
}


public function cargar_clientes(){
    $clientes = $this->model->clientes_lista();
    echo json_encode($clientes, JSON_UNESCAPED_UNICODE);
    exit;
}

public function combustible_select(){
    $combustibles = $this->model->combustibles_disponibles();
    echo json_encode($combustibles, JSON_UNESCAPED_UNICODE);
    exit;
}

public function detalla_gastos(){
    $combustibles = $this->model->tipos_gastos();
    echo json_encode($combustibles, JSON_UNESCAPED_UNICODE);
    exit;
}


public function cantidad_lista(){
       $id_user = (int) $_SESSION['id_usuario'];
       $total_registro = $this->model->contar_lista($id_user);
       echo json_encode($total_registro, JSON_UNESCAPED_UNICODE);
       exit;
}

public function detallar_gastos_registro(){

    // 🔥 RECIBIR DATOS
    $id_gasto  = $_POST['tipo_gasto'] ?? '';
    $modo_pago = $_POST['modo_pago'] ?? '';
    $monto     = $_POST['monto'] ?? 0;
    $detalle   = $_POST['detalle'] ?? '';

    // 🚨 VALIDACIONES
    if (empty($id_gasto) || empty($modo_pago)) {
        echo json_encode("Datos incompletos");
        exit;
    }

    if ((float)$monto <= 0) {
        echo json_encode("Monto inválido");
        exit;
    }

    // 🇵🇪 ZONA HORARIA PERÚ
    date_default_timezone_set("America/Lima");
    $fecha = date("Y-m-d");
    $hora  = date("H:i:s");

    // 📦 ARMAR DATA
    $data = [
        "id_gasto"  => $id_gasto,
        "id_tipo_de_pago" => $modo_pago,
        "monto"     => (float)$monto,
        "detalle"   => $detalle,
        "fecha"     => $fecha,
        "hora"      => $hora
    ];

    // 🚀 ENVIAR AL MODELO
    $res = $this->model->cargar_gasto_detallado($data);

    echo json_encode($res);
}

public function guardar_cliente_venta(){

    $id_user = (int) $_SESSION['id_usuario'];

    date_default_timezone_set('America/Lima');
    $fecha = date('Y-m-d');

    // 🔥 RECIBIR Y LIMPIAR
    $cliente_id   = (int) ($_POST['cliente_id'] ?? 0);
    $combustible  = (int) ($_POST['combustible'] ?? 0);
    $galones      = (float) ($_POST['galones'] ?? 0);
    $descuento    = (float) ($_POST['descuento'] ?? 0);
    $cobranza = $_POST['cobranza'] ?? null;
    $estado_pago  = $_POST['estado_pago'] ?? '';

    // 🚨 VALIDACIÓN
    if ($cliente_id <= 0 || $combustible <= 0 || $galones <= 0) {
        echo json_encode("Campos inválidos");
        die();
    }

    // 🔍 CONSULTAR PRECIO
    $consultar_combustible = $this->model->precio_combustible_id($combustible);

    if (empty($consultar_combustible)) {
        echo json_encode("Combustible no encontrado");
        die();
    }

    $precio = (float) $consultar_combustible['precio'];

    // 🔥 CÁLCULOS SEGUROS
    $total_descuento = $galones * $descuento;
    $sub_total = $precio * $galones;
    $total = $sub_total - $total_descuento;

    // 🚨 EVITAR NEGATIVOS
    if ($total < 0) {
        $total = 0;
    }

    // 🚀 GUARDAR
    $res = $this->model->registrar_venta(
        $cliente_id,
        $combustible,
        $galones,
        $descuento,
        $sub_total,
        $total,
        $estado_pago,
        $cobranza,
        $id_user,
        $fecha
    );

    if ($res == 1) {
        echo json_encode("ok");
    } else {
        echo json_encode("Error al guardar");
    }

    die();
}

public function consultas_clientes_registrados(){
    $id_user = (int) $_SESSION['id_usuario'];
    $datos = $this->model-> consultas_clientes_registrados($id_user);
    echo json_encode($datos, JSON_UNESCAPED_UNICODE);
}

public function lista_de_gastos(){
    $datos = $this->model->lista_de_gastos();
    echo json_encode($datos, JSON_UNESCAPED_UNICODE);
    exit;
}

public function datos_dinero(){

    $id_user = (int) $_SESSION['id_usuario'];

    if(isset($_POST['medio_pago'])){

        $verificar_cierre_de_caja = $this->model->ver_cierre_de_caja();
        if ($verificar_cierre_de_caja['arqueo'] == 0) {
            $res = "cerrar";
            echo json_encode($res, JSON_UNESCAPED_UNICODE);
            exit;
        }

        $medios = $_POST['medio_pago'];

        $buscar_turno = $this->model->seleccionar_turno();
        $turno = $buscar_turno['turno']; 

        $max_id_ventas = $this->model->seleccionar_maximo_id_ventas($id_user, $turno);
        $id_ventas = $max_id_ventas['ultimo_id'];    

        $todo_ok = true;

        foreach($medios as $id => $monto){

            if($monto == "" || $monto == null){
                $monto = 0;
            }

            $data = array(
                "id_medio" => $id,
                "id_user" => $id_user,
                "turno" => $turno,
                "monto" => $monto,
                "id_ventas" => $id_ventas
            );

            $dinero_cierre = $this->model->registrar_dinero($data);

            if ($dinero_cierre != 1) {
                $todo_ok = false;
                break;
            }
        }

        // 🔥 SOLO UNA VEZ
        if($todo_ok){
            $sumar_cierre = $this->model->sumar_total_cierre($id_ventas);
            $sumar_ventas = $this->model->sumar_total_ventas($id_ventas);

            $total_cierre = $sumar_cierre['cierre'];
            $total_ventas = $sumar_ventas['ventas'];

            $this->model->ventas_final($id_ventas, $total_cierre, $total_ventas);
        }

        // 🔥 STOCK
        $detalles = $this->model->sumar_combustibles($id_ventas, $turno, $id_user);
        $combustibles = $this->model->combustibles_actual();

        $diesel  = $detalles['diesel'];
        $regular = $detalles['regular'];
        $primiun = $detalles['primiun'];
        $glp     = $detalles['glp'];

            foreach ($combustibles as $c) {

            $nombre = $c['nombre'];
            $stock_actual = $c['galones'];

            if ($nombre == 'DIESEL') {
                $restar = $diesel;
            } elseif ($nombre == 'REGULAR') {
                $restar = $regular;
            } elseif ($nombre == 'PRIMIUN') {
                $restar = $primiun;
            } elseif ($nombre == 'GLP') {
                $restar = $glp;
            } else {
                $restar = 0;
            }

            $nuevo_stock = $stock_actual - $restar;

            if($nuevo_stock < 0){
                $nuevo_stock = 0;
            }

            // ✅ actualizar stock
            $this->model->actualizar_estock_combustible($nuevo_stock, $nombre);

            // 🔥 insertar historial con ventas_galones
            $this->model->insertar_historial_estock(
                $turno,
                $id_ventas,
                $id_user,
                $nombre,
                $nuevo_stock,
                $restar // 👈 esto es ventas_galones
            );
        }

        $this->model->permitir_apertura();

        $res = $todo_ok ? "ok" : "error";

    }else{
        $res = "NO SE RECIBIERON DATOS";
    }

    echo json_encode($res, JSON_UNESCAPED_UNICODE);
}




function depurar_datos(){
    $id_user = (int) $_SESSION['id_usuario'];
   $maximo_id = $this->model->maximo_id_ventas($id_user);
$id_ventas = $maximo_id['ultimo_id'];

$consultar_ventas = $this->model->combustibles_actual($id_ventas);
print_r($consultar_ventas);
exit;
}


function imprimir_pdf(){

require('libraries/fpdf/fpdf.php');

$id_user = (int) $_SESSION['id_usuario'];
$maximo_id = $this->model->maximo_id_ventas($id_user);
$id_ventas = $maximo_id['ultimo_id'];

$detalles_cierre = $this->model->detalles_cierra($id_ventas);
$detalles = $this->model->ventas_detallada($id_ventas);
$fecha = $detalles_cierre[0]['fecha'];
$turno = $detalles_cierre[0]['turno'];

$pdf = new FPDF('P','mm','A4');
$pdf->AddPage();

// ===== TITULO =====
$pdf->SetFont('Arial','B',13);
$pdf->Cell(120,8,'DETALLES DE CIERRE',0,0,'L');

$pdf->SetFont('Arial','',9);
$pdf->Cell(70,8,'Fecha: '.$fecha.'   Turno: '.$turno,0,1,'R');

$pdf->Ln(2);

// ===== CABECERA =====
$pdf->SetFont('Arial','B',9);

$pdf->Cell(110,6,'Medios de pago',1,0,'C');
$pdf->Cell(80,6,'Monto total',1,1,'C');

// ===== DATOS =====
$pdf->SetFont('Arial','',9);

$total = 0;

foreach($detalles_cierre as $row){

$total += $row['monto'];

$pdf->Cell(110,6,$row['nombre'],1,0,'L');
$pdf->Cell(80,6,number_format($row['monto'],2),1,1,'R');

}

// ===== TOTAL =====
$pdf->SetFont('Arial','B',10);

$pdf->SetFillColor(144,238,144);

$pdf->Cell(110,8,'TOTAL',1,0,'C');
$pdf->Cell(80,8,number_format($total,2),1,1,'R',true);

$pdf->Ln(2);

// ===== OBTENER DETALLES =====

$fecha = $detalles[0]['fecha'];
$turno = $detalles[0]['turno'];

$pdf->Ln(2);

// ===== TITULO =====
$pdf->SetFont('Arial','B',13);
$pdf->Cell(120,10,'DETALLES DE VENTAS',0,0,'L');

$pdf->SetFont('Arial','',10);
$pdf->Cell(70,10,'Fecha: '.$fecha.'   Turno: '.$turno,0,1,'R');

$pdf->Ln(1);


// ===== CABECERA TABLA =====
$pdf->SetFont('Arial','B',9);

$pdf->Cell(15,8,'Isla',1,0,'C');
$pdf->Cell(15,8,'Lado',1,0,'C');
$pdf->Cell(30,8,'Combustible',1,0,'C');
$pdf->Cell(25,8,'Entrada',1,0,'C');
$pdf->Cell(25,8,'Salida',1,0,'C');
$pdf->Cell(20,8,'Galones',1,0,'C');
$pdf->Cell(30,8,'Total Ventas',1,0,'C');
$pdf->Cell(20,8,'Precio',1,1,'C');


// ===== DATOS =====
$pdf->SetFont('Arial','',9);

$total_general = 0;

foreach($detalles as $row){

$total_general += $row['total'];

$pdf->Cell(15,8,$row['isla'],1,0,'C');
$pdf->Cell(15,8,$row['lado'],1,0,'C');
$pdf->Cell(30,8,$row['combustible'],1,0,'C');
$pdf->Cell(25,8,number_format($row['numeracion_inicio'],3,'.',''),1,0,'R');
$pdf->Cell(25,8,number_format($row['numeracion_salida'],3,'.',''),1,0,'R');
$pdf->Cell(20,8,number_format($row['galones'],3,'.',''),1,0,'R');
$pdf->Cell(30,8,number_format($row['total'],2),1,0,'R');
$pdf->Cell(20,8,$row['pu'],1,1,'R');

}


// ===== TOTAL =====
$pdf->SetFont('Arial','B',10);

$pdf->SetFillColor(144,238,144);

$pdf->Cell(130,10,'TOTAL VENTAS',1,0,'R');
$pdf->Cell(30,10,number_format($total_general,2),1,0,'R',true);
$pdf->Cell(20,10,'',1,1);

$pdf->Ln(3);

// ===== TITULO =====
$pdf->SetFont('Arial','B',13);
$pdf->Cell(190,8,'ESTADO DE CAJA',0,1,'L');

$pdf->Ln(2);

// ===== CABECERA =====
$pdf->SetFont('Arial','B',10);

$pdf->Cell(60,8,'Cierre',1,0,'C');
$pdf->Cell(60,8,'Ventas',1,0,'C');
$pdf->Cell(70,8,'Estado',1,1,'C');


// ===== CALCULO ESTADO =====
$estado = '';
$diferencia = 0;

if($total_general > $total){

$diferencia = $total_general - $total;
$estado = 'FALTANTE: '.number_format($diferencia,2);

}elseif($total > $total_general){

$diferencia = $total - $total_general;
$estado = 'SOBRANTE: '.number_format($diferencia,2);

}else{

$estado = 'CUADRADO';

}


// ===== DATOS =====
$pdf->SetFont('Arial','',10);

$pdf->SetFillColor(144,238,144); // verde

$pdf->Cell(60,8,number_format($total,2),1,0,'R',true);
$pdf->Cell(60,8,number_format($total_general,2),1,0,'R',true);
$pdf->Cell(70,8,$estado,1,1,'C');




$pdf->Output();

}

public function historial_ventas(){
    $historial = $this->model->historial_ventas();
    echo json_encode($historial, JSON_UNESCAPED_UNICODE);
    exit;
}
public function depurar(){
    $data = '2026-03-22'; // ← con comillas
    $consultar_roles = $this->model->datos_gastos_detallados($data);

    print_r($consultar_roles);
    exit;
}

public function clientes_grifo(){
    $clientes = $this->model->traer_clientes();
    echo json_encode($clientes, JSON_UNESCAPED_UNICODE);
    exit;
}

public function pdf_historial_general($fecha){

    require('libraries/fpdf/fpdf.php');

    $pagos    = $this->model->datos_generales_del_dia($fecha);
    $detalles = $this->model->ventas_detallada_general($fecha);
    $gastos = $this->model->datos_gastos($fecha);
    $gastos_combustible = $this->model->datos_gastos_combustible($fecha);
    $datos_gastos_detallados = $this->model->datos_gastos_detallados($fecha);

// =========================
// 🔥 AGRUPAR GASTOS DETALLADOS
// =========================
    $otros_gastos = [];

    foreach($datos_gastos_detallados as $row){

        $nombre = $row['nombre'];

        if(!isset($otros_gastos[$nombre])){
            $otros_gastos[$nombre] = 0;
        }

        $otros_gastos[$nombre] += $row['monto'];
    }
    
    // =========================
    // 🔥 RESUMEN GENERAL (TODO EL DIA)
    // =========================
    $combustibles = [];
    $ventas_isla  = [];

    foreach($detalles as $row){

        // GALONES POR COMBUSTIBLE
        $nombre = $row['combustible'];
        if(!isset($combustibles[$nombre])){
            $combustibles[$nombre] = 0;
        }
        $combustibles[$nombre] += $row['galones'];

        // VENTAS POR ISLA
        $isla = $row['isla'];
        if(!isset($ventas_isla[$isla])){
            $ventas_isla[$isla] = 0;
        }
        $ventas_isla[$isla] += $row['total'];
    }

    ksort($combustibles);
    ksort($ventas_isla);

    // =========================
    // 🔹 AGRUPAR POR TURNO
    // =========================
    $agrupado = [];

    foreach ($detalles as $row) {
        $agrupado[$row['turno']][$row['isla']][$row['lado']][] = $row;
    }

    $pdf = new FPDF('P','mm','A4');

    // =========================
    // 🔥 PDF POR TURNO
    // =========================
    foreach($agrupado as $turno => $islas){

        $pdf->AddPage();

        // HEADER
        $pdf->SetFillColor(30,30,30);
        $pdf->SetTextColor(255,255,255);
        $pdf->SetFont('Arial','B',13);
        $pdf->Cell(190,8,'DETALLES DEL TURNO',0,1,'C',true);

        $pdf->SetTextColor(0,0,0);
        $pdf->SetFont('Arial','B',10);
        $pdf->Cell(95,6,'Turno: '.$turno,0,0,'L');
        $pdf->Cell(95,6,'Fecha: '.$fecha,0,1,'R');

        $pdf->Ln(2);

        // =========================
        // 💰 CAJA
        // =========================
        $pdf->SetFillColor(52,152,219);
        $pdf->SetTextColor(255,255,255);
        $pdf->SetFont('Arial','B',10);
        $pdf->Cell(190,6,'DETALLE CAJA',0,1,'C',true);

        $pdf->SetTextColor(0,0,0);
        $pdf->SetFont('Arial','B',8);
        $pdf->SetFillColor(220,220,220);

        $pdf->Cell(110,5.5,'Medio de pago',1,0,'C',true);
        $pdf->Cell(80,5.5,'Monto',1,1,'C',true);

        $pdf->SetFont('Arial','',8);
        $total_caja = 0;

        foreach($pagos as $row){
            if(!isset($row['turno']) || $row['turno'] != $turno) continue;

            $total_caja += $row['monto'];

            $pdf->Cell(110,5.5,$row['nombre'],1,0,'L');
            $pdf->Cell(80,5.5,number_format($row['monto'],2),1,1,'R');
        }

        // TOTAL CAJA
        $pdf->SetFillColor(46,204,113);
        $pdf->SetFont('Arial','B',9);
        $pdf->Cell(110,6,'TOTAL CAJA',1,0,'C',true);
        $pdf->Cell(80,6,number_format($total_caja,2),1,1,'R',true);

        // =========================
        // ⛽ ISLAS
        // =========================
        $pdf->Ln(3);

        $pdf->SetFillColor(155,89,182);
        $pdf->SetTextColor(255,255,255);
        $pdf->SetFont('Arial','B',10);
        $pdf->Cell(190,6,'DETALLE ISLAS',0,1,'C',true);

        $pdf->SetTextColor(0,0,0);

        $total_general = 0;

        foreach($islas as $isla => $lados){

            $pdf->Ln(2);

            $pdf->SetFillColor(241,196,15);
            $pdf->SetFont('Arial','B',10);
            $pdf->Cell(165,6,'ISLA '.$isla,0,1,'C',true);

            foreach($lados as $lado => $items){

                $pdf->SetFont('Arial','B',9);
                $pdf->Cell(100,5,'LADO '.$lado,0,1,'L');

                // CABECERA
                $pdf->SetFillColor(200,200,200);
                $pdf->SetFont('Arial','',8);

                $pdf->Cell(35,5.5,'COMBUSTIBLE',1,0,'C',true);
                $pdf->Cell(25,5.5,'ENTRADA',1,0,'C',true);
                $pdf->Cell(25,5.5,'SALIDA',1,0,'C',true);
                $pdf->Cell(25,5.5,'GALONES',1,0,'C',true);
                $pdf->Cell(25,5.5,'P.U',1,0,'C',true);
                $pdf->Cell(30,5.5,'SOLES',1,1,'C',true);

                $pdf->SetFont('Arial','B',9);

                foreach($items as $row){

                    $total_general += $row['total'];

                    $pdf->Cell(35,5.5,$row['combustible'],1,0,'C');
                    $pdf->Cell(25,5.5,number_format($row['numeracion_inicio'],2),1,0,'C');
                    $pdf->Cell(25,5.5,number_format($row['numeracion_salida'],2),1,0,'C');
                    $pdf->Cell(25,5.5,number_format($row['galones'],3),1,0,'C');
                    $pdf->Cell(25,5.5,number_format($row['pu'],2),1,0,'C');
                    $pdf->Cell(30,5.5,number_format($row['total'],2),1,1,'C');
                }
            }
        }

        // TOTAL VENTAS
        $pdf->Ln(3);

        $pdf->SetFillColor(39,174,96);
        $pdf->SetTextColor(255,255,255);
        $pdf->SetFont('Arial','B',9);

        $pdf->Cell(130,7,'TOTAL VENTAS TURNO',1,0,'R',true);
        $pdf->Cell(60,7,number_format($total_general,2),1,1,'R',true);

        $pdf->SetTextColor(0,0,0);

        // =========================
        // 📊 ESTADO CAJA
        // =========================
        $pdf->Ln(3);

        $pdf->SetFillColor(52,73,94);
        $pdf->SetTextColor(255,255,255);
        $pdf->SetFont('Arial','B',10);
        $pdf->Cell(190,6,'ESTADO DE CAJA',0,1,'C',true);

        if($total_general > $total_caja){
            $estado = 'FALTANTE';
            $colorEstado = [231,76,60];
            $diferencia = $total_general - $total_caja;
        }elseif($total_caja > $total_general){
            $estado = 'SOBRANTE';
            $colorEstado = [52,152,219];
            $diferencia = $total_caja - $total_general;
        }else{
            $estado = 'CUADRADO';
            $colorEstado = [46,204,113];
            $diferencia = 0;
        }

        $pdf->SetFont('Arial','B',9);
        $pdf->SetTextColor(0,0,0);

        $pdf->Cell(60,6,'Caja',1,0,'C');
        $pdf->Cell(60,6,'Ventas',1,0,'C');
        $pdf->Cell(70,6,'Estado',1,1,'C');

        $pdf->SetFont('Arial','',9);

        $pdf->Cell(60,6,number_format($total_caja,2),1,0,'R');
        $pdf->Cell(60,6,number_format($total_general,2),1,0,'R');

        $pdf->SetFillColor($colorEstado[0],$colorEstado[1],$colorEstado[2]);
        $pdf->SetTextColor(255,255,255);

        $textoEstado = $estado;
        if($diferencia > 0){
            $textoEstado .= ': '.number_format($diferencia,2);
        }

        $pdf->Cell(70,6,$textoEstado,1,1,'C',true);

        $pdf->SetTextColor(0,0,0);

    }

// 🔥 RESUMEN FINAL
$pdf->AddPage();

// HEADER
$pdf->SetFillColor(30,30,30);
$pdf->SetTextColor(255,255,255);
$pdf->SetFont('Arial','B',12);

// 🔥 TITULO + FECHA
$pdf->Cell(140,7,'RESUMEN GENERAL DEL DIA',0,0,'C',true);
$pdf->Cell(50,7,'Fecha: '.$fecha,0,1,'R',true);

$pdf->Ln(3);
$pdf->SetTextColor(0,0,0);

$y_inicio = $pdf->GetY();

// =========================
// 🟦 COMBUSTIBLES
// =========================
$pdf->SetFillColor(52,152,219);
$pdf->SetTextColor(255,255,255);
$pdf->SetFont('Arial','B',10);
$pdf->Cell(86,6,'COMBUSTIBLES (GALONES)',0,1,'C',true);

$pdf->SetTextColor(0,0,0);
$pdf->SetFillColor(220,220,220);
$pdf->SetFont('Arial','B',8);

$pdf->Cell(55,6,'COMBUSTIBLE',1,0,'C',true);
$pdf->Cell(30,6,'GALONES',1,1,'C',true);

$pdf->SetFont('Arial','',8);

$fill = false;
$total_galones = 0;

foreach($combustibles as $nombre => $galones){

    $pdf->SetFillColor(245,245,245);

    $pdf->Cell(55,6,$nombre,1,0,'C',$fill);
    $pdf->Cell(30,6,number_format($galones,3),1,1,'C',$fill);

    $total_galones += $galones;
    $fill = !$fill; // zebra
}

// TOTAL GALONES
$pdf->SetFillColor(46,204,113);
$pdf->SetTextColor(255,255,255);
$pdf->SetFont('Arial','B',9);

$pdf->Cell(55,6,'TOTAL',1,0,'C',true);
$pdf->Cell(30,6,number_format($total_galones,3),1,1,'C',true);

$pdf->SetTextColor(0,0,0);


// =========================
// 🟪 VENTAS POR ISLA
// =========================
$pdf->SetXY(105,$y_inicio);

$pdf->SetFillColor(155,89,182);
$pdf->SetTextColor(255,255,255);
$pdf->SetFont('Arial','B',10);
$pdf->Cell(76,6,'VENTAS POR ISLA',0,1,'C',true);

$pdf->SetX(105);

$pdf->SetFillColor(220,220,220);
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Arial','B',10);

$pdf->Cell(30,6,'ISLA',1,0,'C',true);
$pdf->Cell(45,6,'VENTAS',1,1,'C',true);

$pdf->SetFont('Arial','',10);

$fill = false;
$total_islas = 0;

foreach($ventas_isla as $isla => $venta){

    $pdf->SetX(105);
    $pdf->SetFillColor(245,245,245);

    $pdf->Cell(30,6,$isla,1,0,'C',$fill);
    $pdf->Cell(45,6,'S/ '.number_format($venta,2),1,1,'C',$fill);

    $total_islas += $venta;
    $fill = !$fill;
}

// TOTAL ISLAS
$pdf->SetX(105);
$pdf->SetFillColor(39,174,96);
$pdf->SetTextColor(255,255,255);
$pdf->SetFont('Arial','B',9);

$pdf->Cell(30,6,'TOTAL',1,0,'C',true);
$pdf->Cell(45,6,'S/ '.number_format($total_islas,2),1,1,'C',true);

$pdf->SetTextColor(0,0,0);



     $pdf->Ln(10);

// HEADER
$pdf->SetFillColor(192,57,43);
$pdf->SetTextColor(255,255,255);
$pdf->SetFont('Arial','B',12);
$pdf->Cell(190,7,'GASTOS DEL DIA',0,1,'C',true);

$pdf->SetTextColor(0,0,0);
     $pdf->Ln(3);

// =========================
// 🟠 GASTOS COMUNES
// =========================
$pdf->SetFillColor(230,126,34);
$pdf->SetTextColor(255,255,255);
$pdf->SetFont('Arial','B',10);
$pdf->Cell(190,6,'GASTOS COMUNES',0,1,'C',true);

$pdf->SetTextColor(0,0,0);
$pdf->SetFillColor(220,220,220);
$pdf->SetFont('Arial','B',8);

$pdf->Cell(120,6,'DETALLE',1,0,'C',true);
$pdf->Cell(70,6,'MONTO',1,1,'C',true);

$pdf->SetFont('Arial','',8);

$total_gastos = 0;

foreach($gastos as $row){

    $pdf->Cell(120,6,$row['detalle'],1,0,'L');
    $pdf->Cell(70,6,'S/ '.number_format($row['monto'],2),1,1,'R');

    $total_gastos += $row['monto'];
}

// TOTAL
$pdf->SetFillColor(231,76,60);
$pdf->SetTextColor(255,255,255);
$pdf->SetFont('Arial','B',9);

$pdf->Cell(120,6,'TOTAL GASTOS',1,0,'C',true);
$pdf->Cell(70,6,'S/ '.number_format($total_gastos,2),1,1,'R',true);

$pdf->SetTextColor(0,0,0);

$pdf->Ln(3);

$pdf->SetFillColor(52,152,219);
$pdf->SetTextColor(255,255,255);
$pdf->SetFont('Arial','B',10);
$pdf->Cell(190,6,'COMPRAS DE COMBUSTIBLE',0,1,'C',true);

$pdf->SetTextColor(0,0,0);
$pdf->SetFillColor(220,220,220);
$pdf->SetFont('Arial','B',8);

$pdf->Cell(60,6,'COMBUSTIBLE',1,0,'C',true);
$pdf->Cell(30,6,'GALONES',1,0,'C',true);
$pdf->Cell(40,6,'P. COMPRA',1,0,'C',true);
$pdf->Cell(60,6,'TOTAL',1,1,'C',true);

$pdf->SetFont('Arial','',8);

$total_combustible = 0;

foreach($gastos_combustible as $row){

    $pdf->Cell(60,6,$row['nombre'],1,0,'C');
    $pdf->Cell(30,6,$row['galones'],1,0,'C');
    $pdf->Cell(40,6,'S/ '.number_format($row['p_compra'],2),1,0,'C');
    $pdf->Cell(60,6,'S/ '.number_format($row['total'],2),1,1,'C');

    $total_combustible += $row['total'];
}

// TOTAL
$pdf->SetFillColor(41,128,185);
$pdf->SetTextColor(255,255,255);
$pdf->SetFont('Arial','B',9);

$pdf->Cell(130,6,'TOTAL COMBUSTIBLE',1,0,'C',true);
$pdf->Cell(60,6,'S/ '.number_format($total_combustible,2),1,1,'C',true);

$pdf->SetTextColor(0,0,0);

$pdf->Ln(3);

$pdf->SetFillColor(155,89,182);
$pdf->SetTextColor(255,255,255);
$pdf->SetFont('Arial','B',10);
$pdf->Cell(190,6,'PAGOS Y OTROS',0,1,'C',true);

$pdf->SetTextColor(0,0,0);
$pdf->SetFillColor(220,220,220);
$pdf->SetFont('Arial','B',8);

$pdf->Cell(120,6,'CONCEPTO',1,0,'C',true);
$pdf->Cell(70,6,'TOTAL',1,1,'C',true);

$pdf->SetFont('Arial','',8);

$total_otros = 0;

foreach($otros_gastos as $nombre => $monto){

    $pdf->Cell(120,6,$nombre,1,0,'L');
    $pdf->Cell(70,6,'S/ '.number_format($monto,2),1,1,'R');

    $total_otros += $monto;
}

// TOTAL
$pdf->SetFillColor(142,68,173);
$pdf->SetTextColor(255,255,255);
$pdf->SetFont('Arial','B',9);

$pdf->Cell(120,6,'TOTAL OTROS',1,0,'C',true);
$pdf->Cell(70,6,'S/ '.number_format($total_otros,2),1,1,'R',true);

$pdf->SetTextColor(0,0,0);

$pdf->Ln(5);

$total_final_gastos = $total_gastos + $total_combustible + $total_otros;

$pdf->SetFillColor(0,0,0);
$pdf->SetTextColor(255,255,255);
$pdf->SetFont('Arial','B',11);

$pdf->Cell(120,8,'TOTAL GENERAL GASTOS',1,0,'C',true);
$pdf->Cell(70,8,'S/ '.number_format($total_final_gastos,2),1,1,'R',true);

$pdf->SetTextColor(0,0,0);


    $pdf->Output();
}














public function pdf_historial($id_ventas){
    require('libraries/fpdf/fpdf.php');

//$id_user = (int) $_SESSION['id_usuario'];
$detalles_cierre = $this->model->detalles_cierra($id_ventas);
$detalles = $this->model->ventas_detallada($id_ventas);
$combustibles = [
    "DIESEL" => 0,
    "REGULAR" => 0,
    "PRIMIUN" => 0,
    "GLP" => 0
];

foreach ($detalles as $d) {

    $tipo = $d['combustible'];
    $galones = $d['galones'];

    if(isset($combustibles[$tipo])){
        $combustibles[$tipo] += $galones;
    }

}

$ventas_isla = [];

foreach ($detalles as $d) {

    $isla = $d['isla'];
    $total = $d['total'];

    if(!isset($ventas_isla[$isla])){
        $ventas_isla[$isla] = 0;
    }

    $ventas_isla[$isla] += $total;

}
$fecha = $detalles_cierre[0]['fecha'];
$turno = $detalles_cierre[0]['turno'];

$pdf = new FPDF('P','mm','A4');
$pdf->AddPage();

// ===== TITULO =====
$pdf->SetFont('Arial','B',13);
$pdf->Cell(120,8,'DETALLES DE CIERRE',0,0,'L');

$pdf->SetFont('Arial','',9);
$pdf->Cell(70,8,'Fecha: '.$fecha.'   Turno: '.$turno,0,1,'R');

$pdf->Ln(2);

// ===== CABECERA =====
$pdf->SetFont('Arial','B',9);

$pdf->Cell(110,6,'Medios de pago',1,0,'C');
$pdf->Cell(80,6,'Monto total',1,1,'C');

// ===== DATOS =====
$pdf->SetFont('Arial','',9);

$total = 0;

foreach($detalles_cierre as $row){

$total += $row['monto'];

$pdf->Cell(110,6,$row['nombre'],1,0,'L');
$pdf->Cell(80,6,number_format($row['monto'],2),1,1,'R');

}

// ===== TOTAL =====
$pdf->SetFont('Arial','B',10);

$pdf->SetFillColor(144,238,144);

$pdf->Cell(110,8,'TOTAL',1,0,'C');
$pdf->Cell(80,8,number_format($total,2),1,1,'R',true);

$pdf->Ln(2);

// ===== OBTENER DETALLES =====

$fecha = $detalles[0]['fecha'];
$turno = $detalles[0]['turno'];

$pdf->Ln(2);

$pdf->SetFont('Arial','B',12);
$pdf->Cell(120,8,'DETALLES DE VENTAS',0,0,'L');

$pdf->SetFont('Arial','',9);
$pdf->Cell(70,8,'Fecha: '.$fecha.'   Turno: '.$turno,0,1,'R');

$pdf->Ln(2);

$total_general = 0;

/* AGRUPAR POR ISLAS */
$islas = [];

foreach($detalles as $row){
    $islas[$row['isla']][] = $row;
}

foreach($islas as $num_isla => $datos){

    /* ===== TITULO ISLA ===== */
$pdf->SetFont('Arial','B',10);
$pdf->SetFillColor(100,238,275);
$pdf->Cell(160,7,'ISLA '.$num_isla.' - TURNO '.$turno,1,1,'C',true);

    // separar lados
    $ladoA=[];
    $ladoB=[];

    foreach($datos as $d){
        if($d['lado']=='A'){
            $ladoA[]=$d;
        }else{
            $ladoB[]=$d;
        }
    }

    /* =======================
       LADO A
    ========================*/

    if($ladoA){

      $pdf->SetFont('Arial','B',9);
        $pdf->SetFillColor(220,240,255);
        $pdf->Cell(160,6,'LADO A',1,1,'C',true);

        /* CABECERA */
        $pdf->SetFont('Arial','B',8);
        $pdf->SetFillColor(200,230,255);

        $pdf->Cell(32,6,'COMBUSTIBLE',1,0,'C',true);
        $pdf->Cell(28,6,'ENTRADA',1,0,'C',true);
        $pdf->Cell(28,6,'SALIDA',1,0,'C',true);
        $pdf->Cell(22,6,'GALONES',1,0,'C',true);
        $pdf->Cell(20,6,'P.U',1,0,'C',true);
        $pdf->Cell(30,6,'SOLES',1,1,'C',true);

        $pdf->SetFont('Arial','',8);

        foreach($ladoA as $row){

            $soles = $row['pu'] * $row['galones'];
            $total_general += $soles;

            $pdf->Cell(32,6,$row['combustible'],1,0,'C');
            $pdf->Cell(28,6,number_format($row['numeracion_inicio'],2),1,0,'R');
            $pdf->Cell(28,6,number_format($row['numeracion_salida'],2),1,0,'R');
            $pdf->Cell(22,6,number_format($row['galones'],3),1,0,'R');
            $pdf->Cell(20,6,number_format($row['pu'],2),1,0,'R');
            $pdf->Cell(30,6,number_format($soles,2),1,1,'R');
        }
    }

    /* =======================
       LADO B
    ========================*/

    if($ladoB){

      $pdf->SetFont('Arial','B',9);
$pdf->SetFillColor(220,240,255);
$pdf->Cell(160,6,'LADO B',1,1,'C',true);
        /* CABECERA */
        $pdf->SetFont('Arial','B',8);
        $pdf->SetFillColor(200,230,255);

        $pdf->Cell(32,6,'COMBUSTIBLE',1,0,'C',true);
        $pdf->Cell(28,6,'ENTRADA',1,0,'C',true);
        $pdf->Cell(28,6,'SALIDA',1,0,'C',true);
        $pdf->Cell(22,6,'GALONES',1,0,'C',true);
        $pdf->Cell(20,6,'P.U',1,0,'C',true);
        $pdf->Cell(30,6,'SOLES',1,1,'C',true);

        $pdf->SetFont('Arial','',8);

        foreach($ladoB as $row){

            $soles = $row['pu'] * $row['galones'];
            $total_general += $soles;

            $pdf->Cell(32,6,$row['combustible'],1,0,'C');
            $pdf->Cell(28,6,number_format($row['numeracion_inicio'],2),1,0,'R');
            $pdf->Cell(28,6,number_format($row['numeracion_salida'],2),1,0,'R');
            $pdf->Cell(22,6,number_format($row['galones'],3),1,0,'R');
            $pdf->Cell(20,6,number_format($row['pu'],2),1,0,'R');
            $pdf->Cell(30,6,number_format($soles,2),1,1,'R');
        }
    }

    $pdf->Ln(5);
}

// ===== TOTAL =====
$pdf->SetFont('Arial','B',10);

$pdf->SetFillColor(144,238,144);

$pdf->Cell(130,10,'TOTAL VENTAS',1,0,'R');
$pdf->Cell(30,10,number_format($total_general,2),1,0,'R',true);
$pdf->Cell(20,10,'',1,1);

$pdf->Ln(3);

// ===== TITULO =====
$pdf->SetFont('Arial','B',13);
$pdf->Cell(190,8,'ESTADO DE CAJA',0,1,'L');

$pdf->Ln(2);

// ===== CABECERA =====
$pdf->SetFont('Arial','B',10);

$pdf->Cell(60,8,'Cierre',1,0,'C');
$pdf->Cell(60,8,'Ventas',1,0,'C');
$pdf->Cell(70,8,'Estado',1,1,'C');


// ===== CALCULO ESTADO =====
$estado = '';
$diferencia = 0;

if($total_general > $total){

$diferencia = $total_general - $total;
$estado = 'FALTANTE: '.number_format($diferencia,2);

}elseif($total > $total_general){

$diferencia = $total - $total_general;
$estado = 'SOBRANTE: '.number_format($diferencia,2);

}else{

$estado = 'CUADRADO';

}


// ===== DATOS =====
$pdf->SetFont('Arial','',10);

$pdf->SetFillColor(144,238,144); // verde

$pdf->Cell(60,8,number_format($total,2),1,0,'R',true);
$pdf->Cell(60,8,number_format($total_general,2),1,0,'R',true);
$pdf->Cell(70,8,$estado,1,1,'C');
$pdf->Ln(2);

// ===== TITULO =====
$pdf->SetFont('Arial','B',13);
$pdf->Cell(190,8,'COMBUSTIBLES DETALLES VENTAS',0,1,'L');

// GUARDAR POSICION Y
$y_inicio = $pdf->GetY();


// ===== TABLA COMBUSTIBLES =====
$pdf->SetFont('Arial','B',9);

$pdf->Cell(60,7,'COMBUSTIBLE',1,0,'C');
$pdf->Cell(40,7,'GALONES',1,1,'C');

$pdf->SetFont('Arial','',9);

foreach($combustibles as $nombre => $galones){

    $pdf->Cell(60,7,$nombre,1,0,'C');
    $pdf->Cell(40,7,number_format($galones,3),1,1,'C');

}


// ===== TABLA VENTAS POR ISLA (AL COSTADO) =====
$pdf->SetXY(120,$y_inicio);

$pdf->SetFont('Arial','B',11);
$pdf->Cell(80,7,'VENTAS POR ISLA',0,1,'L');

$pdf->SetX(120);

$pdf->SetFont('Arial','B',9);

$pdf->Cell(30,7,'ISLA',1,0,'C');
$pdf->Cell(50,7,'VENTAS',1,1,'C');

$pdf->SetFont('Arial','',9);

foreach($ventas_isla as $isla => $venta){

    $pdf->SetX(120);

    $pdf->Cell(30,7,$isla,1,0,'C');
    $pdf->Cell(50,7,'S/ '.number_format($venta,2),1,1,'C');

}


$pdf->Output();
}

public function enviar_compras_combustible()
{
    if (
        !isset($_POST['combustible']) ||
        !isset($_POST['modo_pago']) ||
        !isset($_POST['precio_compra']) ||
        !isset($_POST['galones'])
    ) {
        echo json_encode("Todos los campos obligatorios son requeridos");
        exit;
    }

    $combustible   = $_POST['combustible'];
    $modo_pago     = $_POST['modo_pago'];
    $precio_compra = $_POST['precio_compra'];
    $galones       = $_POST['galones'];
    $precio_venta  = $_POST['precio_venta'] ?? 0;
    $detalles      = $_POST['detalles'] ?? '';

    $total = $precio_compra * $galones;

    $id_user = $_SESSION['id_usuario'] ?? 0;

    $combustible_actual = $this->model->estock_actual_combustible($combustible);

    $galones_actual = ($combustible_actual['galones'] ?? 0) + $galones;

    $data = $this->model->insertar_compra_combustible(
        $combustible,
        $modo_pago,
        $precio_compra,
        $galones,
        $precio_venta,
        $total,
        $detalles,
        $id_user
    );

    if ($data == 1) {
        $this->model->actualisar_estock_combustible($galones_actual, $precio_venta, $precio_compra, $combustible);
        echo json_encode("ok");
    } else {
        echo json_encode("Error al registrar la compra");
    }

    exit;
}


public function clientes_deudores(){
    $detalles = $this->model->clientes_por_pagos();
    echo json_encode($detalles, JSON_UNESCAPED_UNICODE);
    exit;
}

public function registrar_gastos(){

    if (empty($_POST['modo_pago']) || empty($_POST['monto'])) {
        echo json_encode("Campos obligatorios");
        exit;
    }

    // 📥 DATOS
    $modo_pago = $_POST['modo_pago'];
    $monto     = floatval($_POST['monto']);
    $detalle   = $_POST['detalle'];

    // 👤 usuario (si manejas sesión)
    $id_user = (int) $_SESSION['id_usuario'];

    // 📅 FECHA PERÚ
    date_default_timezone_set('America/Lima');
    $fecha = date('Y-m-d');
    $hora  = date('H:i:s');

    // 📦 MODELO
    $data = $this->model->insertar_gasto(
        $modo_pago,
        $monto,
        $detalle,
        $id_user,
        $fecha,
        $hora
    );

    if ($data == 1) {
        echo json_encode("ok");
    } else {
        echo json_encode("Error al registrar gasto");
    }

    exit;
}


public function caja_dinero_actual(){

    date_default_timezone_set('America/Lima');
    $fecha = date('Y-m-d');

    $tipos_de_pagos = $this->model->medios_pagos();
    $gastos = $this->model->obtener_gastos_hoy();
    $gasto_combustible = $this->model->obtener_gastos_combustible();

    // 🔥 1. AGRUPAR GASTOS NORMALES
    $gastos_por_pago = [];

    foreach ($gastos as $g) {
        $id = $g['id_pago'];

        if (!isset($gastos_por_pago[$id])) {
            $gastos_por_pago[$id] = 0;
        }

        $gastos_por_pago[$id] += floatval($g['monto']);
    }

    // 🔥 2. AGRUPAR GASTOS DE COMBUSTIBLE
    $combustible_por_pago = [];

    foreach ($gasto_combustible as $gc) {
        $id = $gc['id_pago'];

        if (!isset($combustible_por_pago[$id])) {
            $combustible_por_pago[$id] = 0;
        }

        $combustible_por_pago[$id] += floatval($gc['total']);
    }

    // 🔥 3. RESULTADO FINAL
    $resultado = [];

    foreach ($tipos_de_pagos as $pago) {

        $id_pago = $pago['id'];

        // ventas
        $ventas = $this->model->total_por_pago_hoy($id_pago, $fecha);
        $total_ventas = $ventas ? floatval($ventas['total']) : 0;

        // gastos normales
        $total_gastos = isset($gastos_por_pago[$id_pago]) 
                        ? $gastos_por_pago[$id_pago] 
                        : 0;

        // combustible
        $total_combustible = isset($combustible_por_pago[$id_pago]) 
                            ? $combustible_por_pago[$id_pago] 
                            : 0;

        // 🔥 TOTAL DE GASTOS (incluye combustible)
        $total_gastos_final = $total_gastos + $total_combustible;

        // 🔥 FÓRMULA FINAL CORRECTA
        $total_final = $total_ventas - $total_gastos_final;

        $resultado[] = [
            "id" => $id_pago,
            "nombre" => $pago['nombre'],
            "ventas" => number_format($total_ventas, 2, '.', ''),
            "gastos" => number_format($total_gastos_final, 2, '.', ''), // ✅ aquí ya incluye combustible
            "total"  => number_format($total_final, 2, '.', '')
        ];
    }

    echo json_encode($resultado);
    exit;
}

public function actualizar_caja(){

    $datos = $this->calcular_caja();
    $medios = $this->model->medios_pagos();

    $todo_ok = true;

    foreach ($datos as $d) {

        $id = $d['id'];
        $total_dia = floatval($d['total']);

        foreach ($medios as $m) {

            if ($m['id'] == $id) {

                $caja_actual = floatval($m['Caja']);
                $nueva_caja = $caja_actual + $total_dia;

                $res = $this->model->actualizar_caja_por_id($id, $nueva_caja);

                if (!$res) {
                    $todo_ok = false;
                }
            }
        }
    }

    // 🔥 SOLO SI TODO SALIÓ BIEN, CIERRA TODO
    if ($todo_ok) {

          
        $this->model->actualizar_detalles_ventas();
        
        $this->model->actualizar_gastos();
    
        $this->model->actualizar_gastos_combustible();

        $response =  "ok";

    } else {
        $response = "error";
    }

    echo json_encode($response, JSON_UNESCAPED_UNICODE);
    exit();
}


public function calcular_caja(){

    date_default_timezone_set('America/Lima');
    $fecha = date('Y-m-d');

    $tipos_de_pagos = $this->model->medios_pagos();
    $gastos = $this->model->obtener_gastos_hoy();
    $gasto_combustible = $this->model->obtener_gastos_combustible();

    $gastos_por_pago = [];

    foreach ($gastos as $g) {
        $id = $g['id_pago'];

        if (!isset($gastos_por_pago[$id])) {
            $gastos_por_pago[$id] = 0;
        }

        $gastos_por_pago[$id] += floatval($g['monto']);
    }

    $combustible_por_pago = [];

    foreach ($gasto_combustible as $gc) {
        $id = $gc['id_pago'];

        if (!isset($combustible_por_pago[$id])) {
            $combustible_por_pago[$id] = 0;
        }

        $combustible_por_pago[$id] += floatval($gc['total']);
    }

    $resultado = [];

    foreach ($tipos_de_pagos as $pago) {

        $id_pago = $pago['id'];

        $ventas = $this->model->total_por_pago_hoy($id_pago, $fecha);
        $total_ventas = $ventas ? floatval($ventas['total']) : 0;

        $total_gastos = $gastos_por_pago[$id_pago] ?? 0;
        $total_combustible = $combustible_por_pago[$id_pago] ?? 0;

        $total_gastos_final = $total_gastos + $total_combustible;

        $total_final = $total_ventas - $total_gastos_final;

        $resultado[] = [
            "id" => $id_pago,
            "nombre" => $pago['nombre'],
            "ventas" => number_format($total_ventas, 2, '.', ''),
            "gastos" => number_format($total_gastos_final, 2, '.', ''),
            "total"  => number_format($total_final, 2, '.', '')
        ];
    }

    return $resultado; // 🔥 CLAVE
}



public function detallar_gasto_combustible(){

    $data = $this->model->obtener_gastos_combustible();

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


public function detallar_lista(){
    $data = $this->model->obtener_gastos_hoy();
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
    die();
}


public function fecha_hora() {
    date_default_timezone_set('America/Lima');

    $data = [
        'fecha' => date('Y-m-d'),
        'hora'  => date('H:i:s')
    ];

echo json_encode($data);
exit;
}
   
public function gastos_sencillos(){
    $data = $this->model->gastos_simples();
    echo json_encode($data);
    exit;
}

public function gastos_detallados(){
    $datos= $this->model->gastos_detallados();
    echo json_encode($datos, JSON_UNESCAPED_UNICODE);
    exit;
}

public function compras_combustibles(){
    $datos = $this->model->compras_combustibles();
    echo json_encode($datos, JSON_UNESCAPED_UNICODE);
    exit;
}







   
public function lista_reportes(){
    $datos_ventas = $this->model->historial_ventas();
    echo json_encode($datos_ventas, JSON_UNESCAPED_UNICODE);
    exit;
}

public function datos_seccionados($datos){
       $semanal = $this->model->datos_lunes_domingo();
       echo json_encode($semanal, JSON_UNESCAPED_UNICODE);
       exit;
}























































public function registrar_producto()
{
    date_default_timezone_set('America/Lima');
    $fecha = date('Ymd_His');
    $fecha_registro = $fecha;
    // 📥 Datos
    $nombre            = $_POST['producto_nombre'] ?? '';
    $codigo            = $_POST['producto_codigo'] ?? '';
    $cantidad          = $_POST['producto_cantidad'] ?? 0;
    $precio_compra     = $_POST['precio_compra'] ?? 0;
    $precio_venta      = $_POST['precio_venta'] ?? 0;
    $presentacion      = $_POST['producto_presentacion'] ?? '0';
    $categoria         = $_POST['producto_categoria'] ?? '0';
    $fecha_vencimiento = $_POST['producto_vencido'] ?? 0;

    // 🖼️ Imagen
    $imgNombre = "default.png";

        if (!empty($_FILES['producto_imagen']['name'])) {

            $imgTmp = $_FILES['producto_imagen']['tmp_name'];
            $imgExt = strtolower(pathinfo($_FILES['producto_imagen']['name'], PATHINFO_EXTENSION));

            // 🔒 extensiones permitidas
            $permitidas = ['jpg', 'jpeg', 'png'];

            if (!in_array($imgExt, $permitidas)) {
                echo json_encode([
                    "status" => "error",
                    "msg" => "Solo se permiten imágenes JPG o PNG"
                ]);
                exit;
            }

            $imgNombre = $fecha . "_" . time() . "." . $imgExt;
            $destino = "assets/img/" . $imgNombre;

            move_uploaded_file($imgTmp, $destino);
        } else {
            $imgNombre = "default.png";
        }

    // 🚨 Validación
    if (
        empty($nombre) ||
        empty($precio_compra) ||
        empty($precio_venta) ||
        empty($presentacion) ||
        empty($categoria)
    ) {
        echo json_encode([
            "status" => "error",
            "msg" => "Campos obligatorios incompletos"
        ]);
        exit;
    }

    // 📦 Guardar
    $respuesta = $this->model->Nuevo_registro_producto(
        $nombre,
        $codigo,
        $cantidad,
        $precio_compra,
        $precio_venta,
        $presentacion,
        $categoria,
        $fecha_vencimiento,
        $imgNombre,
        $fecha_registro
    );

    echo json_encode($respuesta);
    exit;
}

public function productos_lista(){
    $productos = $this->model->productos_base();
    echo json_encode($productos, JSON_UNESCAPED_UNICODE);
    exit;
}

public function presentaciones(){
    $detalles = $this->model->lista_presentacion();
    echo json_encode($detalles, JSON_UNESCAPED_UNICODE);
    exit();
}
public function categorias(){
    $detalles = $this->model->lista_categoria();
    echo json_encode($detalles, JSON_UNESCAPED_UNICODE);
    exit();
}


public function producto_detalle($id_producto){
    $detalles = $this->model->detalles_base_producto($id_producto);
    echo json_encode($detalles, JSON_UNESCAPED_UNICODE);
    exit();
}

public function eliminar_productos($id_producto){
    $eliminar_producto = $this->model->cambiar_estado_producto($id_producto);
    if ($eliminar_producto == 1) {
       $res = "ok";
    }else {
        $res = "error";
    }
    echo json_encode($res, JSON_UNESCAPED_UNICODE);
    exit;
}
public function editar_productos()
{
    $id_producto = $_POST['id_producto_detalle'];
    $nombre_nuevo = $_POST['producto_detalle'];
    $codigo_nuevo = $_POST['codigo_detalle'];
    $cantidad_actualizada = $_POST['cantidad_detalle'];
    $precio_compra_actualizado = $_POST['precio_compra_detalle'];
    $precio_actualizado = $_POST['precio_venta_detalle'];
    $id_presentacion = $_POST['presentacion_detalle'];
    $id_categoria = $_POST['categoria_detalle'];
    $vencimiento_actualizado = $_POST['vencimiento_detalle'];

    // 📌 IMAGEN ACTUAL
    $producto = $this->model->detalles_base_producto($id_producto);
    $imgActual = $producto['img_producto'];

    $imgNombre = $imgActual; // por defecto mantiene la actual

    // 📸 SI VIENE NUEVA IMAGEN
    if (!empty($_FILES['producto_imagen']['name'])) {

        $imgTmp = $_FILES['producto_imagen']['tmp_name'];
        $imgExt = strtolower(pathinfo($_FILES['producto_imagen']['name'], PATHINFO_EXTENSION));

        $permitidas = ['jpg', 'jpeg', 'png'];

        if (!in_array($imgExt, $permitidas)) {
            echo json_encode("Formato de imagen no permitido");
            exit;
        }

        // 🗑️ BORRAR ANTERIOR SI NO ES DEFAULT
        if ($imgActual !== 'default.png' && file_exists('assets/img/' . $imgActual)) {
            unlink('assets/img/' . $imgActual);
        }

        // 🆕 GUARDAR NUEVA
        $imgNombre = date('Ymd') . '_' . time() . '.' . $imgExt;
        move_uploaded_file($imgTmp, 'assets/img/' . $imgNombre);
    }

    // 🔄 UPDATE
    $actualizar = $this->model->nuevo_datos_producto(
        $id_producto,
        $nombre_nuevo,
        $codigo_nuevo,
        $cantidad_actualizada,
        $precio_compra_actualizado,
        $precio_actualizado,
        $id_presentacion,
        $id_categoria,
        $vencimiento_actualizado,
        $imgNombre
    );

    echo json_encode($actualizar == 1 ? 'ok' : 'error', JSON_UNESCAPED_UNICODE);
    exit;
}
public function nuevo_presentacion(){
    $nueva_presentacion = $_POST['presentaciones_nueva'];
    $registrar = $this->model->presentacion_nuevo($nueva_presentacion);
    if ($registrar == 1) {
       $res = "ok";
    }else {
        $res = "error";
    }
    echo json_encode($res, JSON_UNESCAPED_UNICODE);
    exit;
}

public function recibiendo_categoria(){
    $nueva_categoria = $_POST['nueva_categoria'];
    $registrar = $this->model->categoria_nuevo($nueva_categoria);
    if ($registrar == 1) {
       $res = "ok";
    }else {
        $res = "error";
    }
    echo json_encode($res, JSON_UNESCAPED_UNICODE);
    exit;
}

public function lista_presentaciones_controlador(){
    $lista_presentaciones = $this->model->lista_presentaciones();
    echo json_encode($lista_presentaciones, JSON_UNESCAPED_UNICODE);
    exit;
}

public function lista_categoria_controlador(){
    $lista_presentaciones = $this->model->lista_categorias();
    echo json_encode($lista_presentaciones, JSON_UNESCAPED_UNICODE);
    exit;
}
public function Cambiando_categoria($id_categoria){
        $nuevo_cambio = $_POST['nueva_categoria'];
        $cambiar = $this->model->cambio_categoria($nuevo_cambio, $id_categoria);
        if ($cambiar == 1) {
           $res = "ok";
        }else {
              $res = "error";
        }
        echo json_encode($res, JSON_UNESCAPED_UNICODE);
        exit;
}

public function Cambiando_presentacion($id_presentacion){
        $nuevo_cambio = $_POST['presentacion_nueva'];
        $cambiar = $this->model->cambio_presentacion($nuevo_cambio, $id_presentacion);
        if ($cambiar == 1) {
           $res = "ok";
        }else {
              $res = "error";
        }
        echo json_encode($res, JSON_UNESCAPED_UNICODE);
        exit;
}

































        







































































        


































//nuevo ingreso 


      public function modificar(){
       
        $ruc = $_POST['ruc'];
        $nombre = $_POST['nombre'];
        $tel = $_POST['telefono'];
        $dir = $_POST['direccion'];
        $mensaje = $_POST['mensaje'];
        $correo = $_POST['correo'];
        $usuarios = $_POST['usuarios'];
        $clavesol = $_POST['claveSol'];
        $id = $_POST['id'];
         $data = $this->model->modificar($ruc, $nombre, $tel, $dir, $usuarios, $clavesol, $mensaje, $correo, $id);
         if ($data=="ok") {
           $msg = "ok";
         }else {
          $msg = "error";
         }
         echo json_encode($msg);
         die();


    }
    public function reporteStock(){
        $data = $this->model->getStockMinimo();
        echo json_encode($data);
        die();
    }

public function productosVendidos(){
    $data = $this->model->getproductosVendidos();
    echo json_encode($data);
    die();
}





//ingresar productos con cantidades sin generar compras 





public function registrarIngresoPro(){
    {
        $codigo = $_POST['codigo'];
        $nombre = $_POST['nombre'];
        $precio_compra = $_POST['precio_compra'];
        $precio_venta = $_POST['precio_venta'];
        $medida = $_POST['medida'];
        $categoria = $_POST['categoria'];
        $cantidad = $_POST['cantidad'];
        $id = $_POST['id'];
        $img = $_FILES['imagen'];
        $name = $img['name'];
        $tmpname = $img['tmp_name'];
        
        $fecha = date("YmdHis");
        if (empty($codigo) || empty($nombre) || empty($precio_compra) || empty($precio_venta) || empty($medida)  || empty($categoria) || empty($cantidad)) {
            $smg = "Todos los campos son obligatorios";
        } else {
            if (!empty($name)) {
                $imgNombre= $fecha.".jpg";
                $destino = "assets/img/".$imgNombre;
                # code...
            }elseif (!empty($_POST['foto_actual']) && empty($name)) {
                $imgNombre = $_POST['foto_actual'];
            }else {
                $imgNombre ="default.png";
            }

            if ($id == "") {
                $data = $this->model->registrarProductosdePros($codigo, $nombre, $precio_compra, $precio_venta, $cantidad, $medida, $categoria, $imgNombre);
               
                if ($data == "ok") {
                    if (!empty($name)) {
                        move_uploaded_file($tmpname, $destino);
                    }
                    $smg = "si"; 
                } elseif ($data == "existe") {
                    $smg = "El producto ya existe";
                } else {
                    $smg = "Error al registrar el producto";
                }
            } else {







                $imgDelete = $this->model->editarPro($id);
                if ($imgDelete['foto'] != 'default.png') {
                    if (file_exists("assets/img/". $imgDelete['foto'])) {
                        unlink("assets/img/" . $imgDelete['foto']);
                    }
                }
                $data = $this->model->modificarProductos($codigo, $nombre, $precio_compra, $precio_venta, $medida, $categoria, $imgNombre, $id);
                if ($data == "modificado") {
                    if (!empty($name)) {
                        move_uploaded_file($tmpname, $destino);
                    }
                    $smg = "modificado";
                } else {
                    $smg = "Error al modificar el producto";
                }
                
            }
        }
        echo json_encode($smg, JSON_UNESCAPED_UNICODE);
        die();
    }
}



public function buscarCcodeg($cod){
    $data=$this->model->getProCodeggg($cod);
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
    die();

}





public function editar(int $id)
{
    $data = $this->model->editarPro($id);
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
    die();
}

public function modificarproduc() {
    $codigo = isset($_POST['codigoss']) ? $_POST['codigoss'] : '';
    $descripcion = isset($_POST['nombress']) ? $_POST['nombress'] : '';
    $precio_compra = isset($_POST['precio_comprass']) ? $_POST['precio_comprass'] : '';
    $precio_venta = isset($_POST['precio_ventass']) ? $_POST['precio_ventass'] : '';
    $cantidades = isset($_POST['cantidadss']) ? $_POST['cantidadss'] : '';
    $id_producto = isset($_POST['id_producto']) ? $_POST['id_producto'] : '';
    $id_producto = intval($id_producto);
   

    $stock_actual = $this->model->getProductosss($id_producto);

    if (is_array($stock_actual) && isset($stock_actual['cantidad'])) {
        $stock = $stock_actual['cantidad'] + $cantidades;
        $this->model->actualizarStockss($stock, $id_producto);
        $data = $this->model->modificarproducion($codigo, $descripcion, $precio_compra, $precio_venta, $stock, $id_producto);
        if ($data == 1) {
                $msg = "ok";
            } else {
                $msg = "error al obtener o actualizar el stock";
            }
    echo json_encode($msg);
    die();
}

}







// Actualizar
public function modificarproducionc(){
    $id_user = (int)$_SESSION['id_usuario'];
    $codigo = isset($_POST['codigosso']) ? $_POST['codigosso'] : '';
    $descripcion = isset($_POST['nombresss']) ? $_POST['nombresss'] : '';
    $precio_compra = isset($_POST['precio_comprasss']) ? $_POST['precio_comprasss'] : '';
    $precio_venta = isset($_POST['precio_ventasss']) ? $_POST['precio_ventasss'] : '';
    $stock = isset($_POST['cantidadssee']) ? $_POST['cantidadssee'] : '';
    $id_producto = isset($_POST['id_producion']) ? $_POST['id_producion'] : '';
    $id_producto = intval($id_producto);
    $seleccionar_productos_actial = $this->model->obtenerdatosActual($id_producto);
    $id_productoModificado = $seleccionar_productos_actial['id'];
    $producto = $seleccionar_productos_actial['descripcion'];
    $cantidad_actual = $seleccionar_productos_actial['cantidad'];
    $id_medida = $seleccionar_productos_actial['id_medida'];
    $tipo = "Modificacion de productos";
    $resgistrar = $this->model->registrarStockActual($id_user, $id_productoModificado, $producto, $cantidad_actual, $tipo, $id_medida);

    if ($resgistrar == 1) {
        $data = $this->model->recibirNumeroModificado($stock, $id_producto);
        $datos = $this->model->modificarproducion($codigo, $descripcion, $precio_compra, $precio_venta, $stock, $id_producto);
    }
        if ($data == "ok") {

            $msg="ok";
          
            } else {
                $msg = "error al obtener o actualizar el stock";
            }
            

    echo json_encode($msg);
    die();


}



// Actualizar


public function buscarCcodegech($cod){
    $data=$this->model->getProCodeggg($cod);
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
    die();

}


public function reporteStockgeneral() {
    $data = $this->model->getproductosGeneral();
    if ($data) {
        echo json_encode($data);
    } else {
        echo "Error al obtener los datos de la base de datos.";
    }
    die();
}


//panel central administrativo
//panel central administrativo
//panel central administrativo
//panel central administrativo
//panel central administrativo

//panel central administrativo





public function Panel(){
    $id_user = (int)$_SESSION['id_usuario'];
    $verificar = $this->model->verificarPermiso($id_user, 'panel');
    if (!empty($verificar) || $id_user == 1 ) {
    $data = $this->model->Descuentos();    
    $data = $this->model->anulaciones();
    $data['suma_total'] = $this->model->traerTotalVentas();
    $data['ganancias']= $this->model->sumarganaciastototal();
    $this->views->getviews($this, "panel", $data);

} else {
    header('Location: ' . base_url . 'errors/permisos');

}
    
}



public function traerarqueo() {
    $data = $this->model->traecierrecaja();
    $activo = $this->model->cajaActivo();
    foreach ($activo as &$item) {
        if ($item['estado'] == 1) {
            $item['estado'] = '<span class="badge badge-success">activo</span>';
        }
    }
    foreach ($data as &$item) {
        if ($item['estado'] == 0) {
            $item['estado'] = '<span class="badge badge-danger">cerrado</span>  <a href="' . base_url . 'Administracion/imprimirArqueos/' . $item['id_usuario'] . '" target="_blank"><i class="fa-solid fa-print fa-lg" style="color: #147d12;"></i></a>';
        }
    }
    $response = [
        'data' => [
            'arqueo' => $data,
            'activo' => $activo
        ]
    ];

    header('Content-Type: application/json');
    echo json_encode($response, JSON_UNESCAPED_UNICODE);
}


public function imprimirArqueos($id_usuario){

    $detalles = $this->model->detallesarqueo($id_usuario);
    $ventas = $this->model->detalles_ventas($id_usuario);
    $adelantos = $this->model->adelantos($id_usuario);
    $total = $this->model->total_ventas($id_usuario);
    $yape = $this->model->pagosconyape($id_usuario);
    $plin = $this->model->pagosplin($id_usuario);
    $bcp = $this->model->bcp($id_usuario);
    $bbva = $this->model->bbva($id_usuario);
    $banconacion = $this->model->banconacion($id_usuario);
    $otros = $this->model->otros($id_usuario);
    $anulaciones = $this->model->anular_ventas($id_usuario);


    require('libraries/fpdf/fpdf.php');
    $pdf = new FPDF('P', 'mm', array(80, 210));
    $pdf->AddPage();
    $pdf->SetMargins(5,0,0);
    $pdf->SetTitle('ARQUEO');
    $pdf->SetFont('Arial','B',10);
    
    $pdf->Cell(65,8,'ARQUEO', 0, 1, 'C');
    $pdf->Image('assets/img/Captura de pantalla 2023-09-24 180223.png', 20, 2, 45, 10);
    
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(22,3, 'Usuario Caja',0,0,'L');
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(35,3, $detalles['nombre_usuario'],0,1,'R');  
    
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(22,3, 'Fecha de apertura',0,0,'L');
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(35,3, $detalles['fecha_apertura'],0,1,'R'); 
    
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(22,3, utf8_decode('Apertura'),0,0,'L');
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(35,3, $detalles['monto_inicial'],0,1,'R');

    
    $pdf->SetFont('Arial','B',7);
    $pdf->Cell(22,3, utf8_decode('Total de ventas'),0,0,'L');
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(35,3, $total['total'],0,1,'R'); 

    if ($yape && isset($yape['total'])) {
        $pdf->SetFont('Arial','B',7);
        $pdf->Cell(22, 3, utf8_decode('Yape'), 0, 0, 'L');
        $pdf->SetFont('Arial', '', 7);
        $pdf->Cell(35, 3, $yape['total'], 0, 1, 'R');
    }

    if ($plin && isset($plin['total'])) {
        $pdf->SetFont('Arial', 'B', 7);
        $pdf->Cell(22, 3, utf8_decode('Plin'), 0, 0, 'L');
        $pdf->SetFont('Arial', '', 7);
        $pdf->Cell(35, 3, $plin['total'], 0, 1, 'R');
    }

    if ($bcp && isset($bcp['total'])) {
    $pdf->SetFont('Arial', 'B', 7);
    $pdf->Cell(22, 3, utf8_decode('Transferencia BCP'), 0, 0, 'L');
    $pdf->SetFont('Arial', '', 7);
    $pdf->Cell(35, 3, $bcp['total'], 0, 1, 'R');
    }

    if ($bbva && isset($bbva['total'])) {
        $pdf->SetFont('Arial', 'B', 7);
        $pdf->Cell(22, 3, utf8_decode('Transferencia BBVA'), 0, 0, 'L');
        $pdf->SetFont('Arial', '', 7);
        $pdf->Cell(35, 3, $bbva['total'], 0, 1, 'R');
    }

    if ($banconacion && isset($banconacion['total'])) {
        $pdf->SetFont('Arial', 'B', 7);
        $pdf->Cell(22, 3, utf8_decode('Banco Naci贸n'), 0, 0, 'L');
        $pdf->SetFont('Arial', '', 7);
        $pdf->Cell(35, 3, $banconacion['total'], 0, 1, 'R');
    }

    if ($otros && isset($otros['total'])) {
        $pdf->SetFont('Arial', 'B', 7);
        $pdf->Cell(22, 3, utf8_decode('Otros'), 0, 0, 'L');
        $pdf->SetFont('Arial', '', 7);
        $pdf->Cell(35, 3, $otros['total'], 0, 1, 'R');
    }

    $pdf->SetFont('Arial','B',7);
    $pdf->Cell(22,3, utf8_decode('ventas en efectivo'),0,0,'L');
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(35,3, $detalles['total_ventas'],0,1,'R'); 

    $pdf->SetFont('Arial','',7);
    $pdf->Cell(22,3, utf8_decode('Compras'),0,0,'L');
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(35,3, $detalles['total_compras'],0,1,'R');  
    
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(22,3, utf8_decode('Ingresos'),0,0,'L');
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(35,3, $detalles['ingreso'],0,1,'R'); 
    
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(22,3, utf8_decode('Egresos'),0,0,'L');
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(35,3, $detalles['egresos'],0,1,'R');  
    $pdf->Ln();


    
    
    if (!empty($adelantos)) {
        $pdf->SetFont('Arial', 'B', 6);
        $pdf->Cell(65, 4, 'ADELANTOS', 0, 1, 'C');
        foreach ($adelantos as $adelanto) {
            $pdf->SetFont('Arial', '', 6);
            $pdf->Cell(22, 2, utf8_decode($adelanto['nombre']), 0, 0, 'L');
            $pdf->SetFont('Arial', '', 6);
            $pdf->Cell(35, 2, $adelanto['monto'], 0, 1, 'R');
        }
    }
    
    $pdf->Ln();
    $pdf->SetFont('Arial','B',7);
    $pdf->Cell(22,3, utf8_decode('Efectivo en caja'),0,0,'L');
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(35,3, $detalles['total'],0,1,'R');
    
    $pdf->SetFont('Arial','B',7);
    $pdf->Cell(22,3, utf8_decode('Monto de Cierre'),0,0,'L');
    $pdf->SetFont('Arial','',7);
    $pdf->Cell(35,3, $detalles['monto_cierre'],0,1,'R');  
   
    $diferencia = $detalles['monto_cierre'] - $detalles['total'];

    $pdf->SetFont('Arial', 'B', 8);
    $pdf->Cell(22, 3, utf8_decode('Diferencia'), 0, 0, 'L');
    $pdf->SetFont('Arial', '', 8);
    
    if ($diferencia < 0) {
        $pdf->Cell(35, 5, 'Faltante', 0, 0, 'C');
        $pdf->Cell(35, 5, abs($diferencia), 0, 1, 'L');
    } elseif ($diferencia > 0) {
        $pdf->Cell(35, 5, 'Sobrante', 0, 0, 'C');
        $pdf->Cell(35, 5, abs($diferencia), 0, 1, 'L');
    } else {
        $pdf->Cell(35, 5, 'Conforme', 0, 1, 'R');
    }
    
    $pdf->Ln();

    $pdf->Cell(65,4,'DETALLES', 0, 1, 'C');
    $pdf->Ln();

    $pdf->SetFillColor(0); 
    $pdf->SetTextColor(255); 
    $pdf->SetFont('Arial', 'B', 6);
    $pdf->Cell(22, 4, utf8_decode('Descripci贸n'), 0, 0, 'L', 1); 
    $pdf->Cell(18, 4, 'Cantidad', 0, 0, 'R', 1);
    $pdf->Cell(18, 4, 'Subtotal', 0, 1, 'L', 1);
    
    $pdf->SetFillColor(255); 
    $pdf->SetTextColor(0); 
    $pdf->Ln();
    foreach ($ventas as $venta) {
        $pdf->SetFont('Arial','B',6);
        $pdf->Cell(22, 2, utf8_decode($venta['descripcion']), 0, 0, 'L');
        $pdf->SetFont('Arial', '', 6);
        $pdf->Cell(18, 2, $venta['cantidad_total'], 0, 0, 'R');
        $pdf->SetFont('Arial', '', 6);
        $pdf->Cell(18, 2, $venta['sub_total_total'], 0, 1, 'L');
      
    }


    $pdf->Ln();

    $pdf->Ln();
    if ($anulaciones && isset($anulaciones['suma_total'])) {
        
        $pdf->SetFont('Arial', 'B', 6);
        $pdf->Cell(65,4,'OBSERVACIONES / MOVIMIENTOS', 0, 1, 'C');
        $pdf->SetFont('Arial', 'B', 7);
        $pdf->Cell(15, 3, utf8_decode('Anulaciones'), 0, 0, 'L');
        $pdf->SetFont('Arial', '', 7);
        $pdf->Cell(13); 
        
        $pdf->Cell(11, 3, $anulaciones['total_anulaciones'], 0, 0, 'C');
        $pdf->Cell(11, 3, $anulaciones['suma_total'], 0, 0, 'C');
    }

    $pdf->Ln();
   

    $pdf->Output();
}









public function traerinventarios(){
    $data = $this->model->traerinventario();

    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>
          
            <span class="badge badge-primary">ADMINISTRADOR</span>
            </div>';
            
        }
    }
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
    die();


}


public function regisinventario() {
    $inventarios = $this->model->traerinventario();
    $obtenerproductos = $this->model->selecionarProductos();

    $resultado = array(); // Aqu铆 almacenaremos los resultados.

    foreach ($inventarios as $inventario) {
        $id = $inventario['id'];
        $producto = $inventario['producto'];
        $categoria = $inventario['categoria'];
        $medida = $inventario['medida'];
        $cantida = $inventario['cantidad'];

        foreach ($obtenerproductos as $productoInfo) {
            $productos1 = $productoInfo['descripcion'];
            $categoria1 = $productoInfo['categoria'];
            $medida1 = $productoInfo['medida'];
            $cantida1 = $productoInfo['cantidad'];

            if ($producto === $productos1 && $categoria === $categoria1 && $medida === $medida1) {
                // Los productos son iguales, realiza la resta y registra el resultado.
                $resultado[] = array(
                    'id' => $id,
                    'producto' => $producto,
                    'categoria' => $categoria,
                    'medida' => $medida,
                    'resultado' => $cantida - $cantida1
                );
            }
        }
    }

    if (!empty($resultado)) {
        foreach ($resultado as $res) {
            $this->model->RegisInventarioTemp($res['producto'], $res['resultado'], $res['categoria'], $res['medida'],$res['id']);
        }

        echo json_encode("Operaci贸n completada", JSON_UNESCAPED_UNICODE);
    } else {
        echo json_encode("No se encontraron productos iguales", JSON_UNESCAPED_UNICODE);
    }
}


public function actualizarEstado(){
   $data = $this->model->ActualizarEsT();
   echo json_encode($data, JSON_UNESCAPED_UNICODE);
}


public function mostra_inventarios_temp() {
    $data = $this->model->SELECIONARinventario_temp();

    for ($i = 0; $i < count($data); $i++) {
        if ($data[$i]['estado'] == 1) {
            $data[$i]['estado'] = '<span class="badge badge-success">activo</span>';
            
        }
    }
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
    die();
}



public function vaciart() {
    $data = $this->model->vaciartabla();
    if ($data == "ok") {
       $msg = "ok";
    }else {
        $msg = "error";
    }
   echo json_encode($msg, JSON_UNESCAPED_UNICODE);
}

//falta su jeson
public function adelantados(){
    $data = $this->model->traeradelantos();
    for ($i = 0; $i < count($data); $i++) {
        if ($data[$i]['estado'] == 1) {
            $data[$i]['estado'] = '<span class="badge badge-success">entregado</span>';
         
            
        }
    }
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
}


public function arqueosHist(){
    $data = $this->model->obtenerArqueos();
    foreach ($data as &$item) {
        if ($item['estado'] == 0) {
            $item['estado'] = '<span class="badge badge-danger">cerrado</span>  <a href="' . base_url . 'Administracion/imprimirArqueos/' . $item['id'] . '" target="_blank"><i class="fa-solid fa-print fa-lg" style="color: #147d12;"></i></a>';
        }
    }

    echo json_encode($data, JSON_UNESCAPED_UNICODE);
}

public function obtenertabla_ingresos(){
    $data = $this->model->obteneringresos();
    foreach ($data as &$item) {
        if ($item['estado'] == 1) {
            $item['estado'] = '<button class="btn btn-primary" onclick="updateEstado(' . $item['id'] . ')">confirmar</button>';
        }
        
    }
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
}


public function updateIngreso($id_ingreso){
    $data = $this->model->udatear_igresos($id_ingreso);
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
}


public function obtener_egresos(){
    $data = $this->model->obtenerss_egresos();
    foreach ($data as &$item) {
        if ($item['estado'] == 1) {
            $item['estado'] = '<button class="btn btn-primary" onclick="ubdates_Egreso(' . $item['id'] . ')">confirmar</button>';
        }
        
    }
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
}

public function ubdatesegresoss($id_engreso){
    $data = $this->model->udatear_egress($id_engreso);
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
}


public function mostrarGanann(){
    $data = $this->model->sumargananciapor_usuario();
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
}


public function productosRechazados(){
    $datos_rechazados = $this->model->selecionarProductoisRechazados();
    
    foreach ($datos_rechazados as $recazado){
        $id_producto_rechazado[] = $recazado['id'];
        $cantida[] = $recazado['cantidad'];
        $categoria[] = $recazado['categoria'];
        $medida[] = $recazado['medida'];
        $id_inventarios[] = $recazado['id_inventario'];
    }
    $resgistrar = $this->model->productosRechazados($id_producto_rechazado,$cantida,$categoria,$medida,$id_inventarios);
    if ($resgistrar == "ok") {
      $res = "ok";
    }elseif ($resgistrar == "existe") {
       $res = "existe";
    }else{
        $res = "error";
    }
    echo json_encode($res, JSON_UNESCAPED_UNICODE);

}


public function graficosVentas(){
    $data = $this->model->mostrarVentasGraficos();
    $result = array();

    foreach ($data as $venta) {
        $fecha = explode(' ', $venta['fecha'])[0]; 
        $totalVentas = floatval($venta['totalVentas']); 
        if (array_key_exists($fecha, $result)) {
            $result[$fecha] += $totalVentas;
        } else {
            $result[$fecha] = $totalVentas;
        }
    }

    $formattedData = array();
    foreach ($result as $fecha => $totalVentas) {
        $formattedData[] = array('fecha' => $fecha, 'totalVentas' => $totalVentas);
    }

    echo json_encode($formattedData, JSON_UNESCAPED_UNICODE);
}


public function perdidas(){
    $data = $this->model->perdidas();
    echo json_encode($data,JSON_UNESCAPED_UNICODE);
    
}

public function prdocutosVentas(){
    $prodcutosVendidos = $this->model->productosVendidos();
    echo json_encode($prodcutosVendidos, JSON_UNESCAPED_UNICODE);

}


public function contarObservaciones(){
    $dcontarObservaciones = $this->model->contarObservaciones();
    echo json_encode($dcontarObservaciones);
}

public function usuarios_admin(){
    $data = $this->model->user_prueva();
    print_r($data);
    exit;
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
}







}