<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Dashboard extends MY_Controller {

    public function index() {
        $this->validar_permiso('dashboard_ver');

        $hoy = date('Y-m-d');

        // ---------------------------------------------------------------
        // FILA 1 — Cards resumen del día
        // ---------------------------------------------------------------

        // Ventas del día
        $ventas_hoy = $this->db
            ->select('COUNT(*) as total_comprobantes, SUM(pago_neto) as total_ventas')
            ->from('vt_comprobante')
            ->where('DATE(fecha)', $hoy)
            ->where_in('estado_id', array(23, 26, 27))
            ->get()->row();

        // Partes de ingreso del día
        $pi_hoy = $this->db
            ->select('COUNT(*) as total')
            ->from('lt_parte_ingreso')
            ->where('DATE(fecha)', $hoy)
            ->where('estado', 1)
            ->get()->row();

        // Partes de salida del día
        $ps_hoy = $this->db
            ->select('COUNT(*) as total')
            ->from('lt_parte_salida')
            ->where('DATE(fecha)', $hoy)
            ->where('estado', 1)
            ->get()->row();

        // OC pendientes de autorización
        $oc_pendientes = $this->db
            ->select('COUNT(*) as total')
            ->from('lt_orden_compra')
            ->where('estado_id', 17) // EMITIDO
            ->get()->row();

        // ---------------------------------------------------------------
        // FILA 2 — Alertas
        // ---------------------------------------------------------------

        // Comprobantes vencidos por cobrar
        $cobrar_vencidos = $this->db
            ->select('COUNT(*) as total, SUM(saldo) as monto')
            ->from('vt_comprobante')
            ->where_in('estado_id', array(23, 27))
            ->where('saldo >', 0)
            ->where('fecvencimiento IS NOT NULL')
            ->where('fecvencimiento <', $hoy)
            ->get()->row();

        // Comprobantes por vencer en 7 días
        $cobrar_por_vencer = $this->db
            ->select('COUNT(*) as total, SUM(saldo) as monto')
            ->from('vt_comprobante')
            ->where_in('estado_id', array(23, 27))
            ->where('saldo >', 0)
            ->where('fecvencimiento IS NOT NULL')
            ->where('fecvencimiento >=', $hoy)
            ->where('fecvencimiento <=', date('Y-m-d', strtotime('+7 days')))
            ->get()->row();

        // Facturas proveedor vencidas
        $pagar_vencidos = $this->db
            ->select('COUNT(*) as total, SUM(saldo) as monto')
            ->from('cp_comprobante_proveedor')
            ->where('estado', 1)
            ->where('saldo >', 0)
            ->where('fecha_vencimiento IS NOT NULL')
            ->where('fecha_vencimiento <', $hoy)
            ->get()->row();

        // Productos con stock bajo mínimo
        $stock_bajo = $this->db
            ->select('COUNT(*) as total')
            ->from('vt_producto_almacen pa')
            ->join('vt_producto p', 'p.id = pa.producto_id')
            ->where('p.estado', 1)
            ->where('p.maneja_stock', 1)
            ->where('pa.cantidad_minima >', 0)
            ->where('pa.cantidad_stock <= pa.cantidad_minima')
            ->get()->row();

        // Ajustes de inventario pendientes de aprobación
        $ajustes_pendientes = $this->db
            ->select('COUNT(*) as total')
            ->from('lt_ajuste_inventario')
            ->where('estado_id', 1) // BORRADOR
            ->get()->row();

        // ---------------------------------------------------------------
        // FILA 3 — Ventas últimos 30 días (gráfico)
        // ---------------------------------------------------------------
        $ventas_30dias = $this->db->query("
            SELECT
                DATE_FORMAT(fecha, '%d/%m') as dia,
                DATE(fecha) as fecha_raw,
                SUM(pago_neto) as total
            FROM vt_comprobante
            WHERE DATE(fecha) >= DATE_SUB(CURDATE(), INTERVAL 29 DAY)
            AND estado_id NOT IN (24)
            GROUP BY DATE(fecha)
            ORDER BY DATE(fecha) ASC
        ")->result();

        // Top 5 productos más vendidos del mes
        $top_productos = $this->db->query("
            SELECT
                p.nombre as producto,
                p.codigo,
                SUM(d.cantidad) as cantidad_total,
                SUM(d.subtotal) as monto_total
            FROM vt_comprobante_detalle d
            JOIN vt_comprobante c ON c.id = d.comprob_id
            JOIN vt_producto p ON p.id = d.producto_id
            WHERE DATE(c.fecha) >= DATE_FORMAT(CURDATE(), '%Y-%m-01')
            AND c.estado_id NOT IN (24)
            GROUP BY d.producto_id
            ORDER BY cantidad_total DESC
            LIMIT 5
        ")->result();

        // ---------------------------------------------------------------
        // EMPRESA
        // ---------------------------------------------------------------
        $empresa = $this->db->get('empresa')->row();

        // ---------------------------------------------------------------
        // Pasar datos a la vista
        // ---------------------------------------------------------------
        $data['titulo']             = 'Dashboard';
        $data['empresa']            = $empresa;
        $data['ventas_hoy']         = $ventas_hoy;
        $data['pi_hoy']             = $pi_hoy;
        $data['ps_hoy']             = $ps_hoy;
        $data['oc_pendientes']      = $oc_pendientes;
        $data['cobrar_vencidos']    = $cobrar_vencidos;
        $data['cobrar_por_vencer']  = $cobrar_por_vencer;
        $data['pagar_vencidos']     = $pagar_vencidos;
        $data['stock_bajo']         = $stock_bajo;
        $data['ajustes_pendientes'] = $ajustes_pendientes;
        $data['ventas_30dias']      = $ventas_30dias;
        $data['top_productos']      = $top_productos;

        $this->layout('dashboard/index', $data);
    }
}
