<?php
require_once __DIR__ . '/../config/database.php';
require_once __DIR__ . '/../includes/helpers.php';

$pdo = getConnection();

try {
    $fecha = $_GET['fecha'] ?? date('Y-m-d');
    $sucursal_id = intval($_GET['sucursal_id'] ?? 0);
    $where_suc_v = $sucursal_id ? "AND v.sucursal_id=$sucursal_id" : '';
    $where_suc_g = $sucursal_id ? "AND g.sucursal_id=$sucursal_id" : '';
    $where_suc_c = $sucursal_id ? "AND c.sucursal_id=$sucursal_id" : '';

    // Ventas del dia
    $st = $pdo->prepare("SELECT COUNT(*) as transacciones, COALESCE(SUM(v.total),0) as total,
                                COALESCE(SUM(v.monto_efectivo),0) as efectivo, COALESCE(SUM(v.monto_tarjeta),0) as tarjeta,
                                COALESCE(SUM(v.descuento),0) as descuentos, COALESCE(SUM(v.subtotal),0) as subtotal,
                                COALESCE(SUM(v.impuestos),0) as impuestos
                         FROM ventas v WHERE DATE(v.fecha_y_hora) = ? $where_suc_v");
    $st->execute([$fecha]);
    $ventas = $st->fetch(PDO::FETCH_ASSOC);

    // Ventas por sucursal
    $st2 = $pdo->prepare("SELECT s.nombre, COUNT(*) as transacciones, COALESCE(SUM(v.total),0) as total
                          FROM ventas v JOIN sucursales s ON s.id=v.sucursal_id
                          WHERE DATE(v.fecha_y_hora)=? $where_suc_v GROUP BY v.sucursal_id ORDER BY total DESC");
    $st2->execute([$fecha]);
    $porSucursal = $st2->fetchAll(PDO::FETCH_ASSOC);

    // Ventas por tipo pago
    $st3 = $pdo->prepare("SELECT tp.nombre as tipo_pago, COUNT(*) as transacciones, COALESCE(SUM(v.total),0) as total
                          FROM ventas v JOIN tipopago tp ON tp.id=v.id_tipopago
                          WHERE DATE(v.fecha_y_hora)=? $where_suc_v GROUP BY v.id_tipopago");
    $st3->execute([$fecha]);
    $porPago = $st3->fetchAll(PDO::FETCH_ASSOC);

    // Top productos vendidos hoy
    $st4 = $pdo->prepare("SELECT p.NombreComercial as producto, p.CodigoInterno as codigo,
                                 SUM(dv.cantidad) as qty, SUM(dv.precio * dv.cantidad) as total
                          FROM detalle_ventas dv
                          JOIN ventas v ON v.id=dv.venta_id
                          JOIN productos p ON p.id=dv.producto_id
                          WHERE DATE(v.fecha_y_hora)=? $where_suc_v
                          GROUP BY dv.producto_id ORDER BY qty DESC LIMIT 20");
    $st4->execute([$fecha]);
    $topProductos = $st4->fetchAll(PDO::FETCH_ASSOC);

    // Gastos del dia (operativos)
    $st5 = $pdo->prepare("SELECT COALESCE(SUM(g.monto),0) as total, COUNT(*) as transacciones
                          FROM gastos_operativos g WHERE g.fecha_gasto = ? $where_suc_g");
    $st5->execute([$fecha]);
    $gastos = $st5->fetch(PDO::FETCH_ASSOC);

    // Gastos por categoria
    $st6 = $pdo->prepare("SELECT c.nombre, COALESCE(SUM(g.monto),0) as total
                          FROM gastos_operativos g LEFT JOIN categorias_gastos c ON c.id=g.categoria_id
                          WHERE g.fecha_gasto=? $where_suc_g GROUP BY g.categoria_id ORDER BY total DESC");
    $st6->execute([$fecha]);
    $gastosCat = $st6->fetchAll(PDO::FETCH_ASSOC);

    // Gastos caja chica
    $st7 = $pdo->prepare("SELECT COALESCE(SUM(monto),0) as total FROM caja_chica_movimientos WHERE DATE(fecha)=? AND tipo='egreso'");
    $st7->execute([$fecha]);
    $cajaChica = (float)$st7->fetchColumn();

    // Compras del dia
    $st8 = $pdo->prepare("SELECT COUNT(*) as transacciones, COALESCE(SUM(c.total),0) as total FROM compras c WHERE DATE(c.fecha_compra)=? $where_suc_c");
    $st8->execute([$fecha]);
    $compras = $st8->fetch(PDO::FETCH_ASSOC);

    // Utilidad estimada (precio venta - costo promedio)
    $st9 = $pdo->prepare("SELECT COALESCE(SUM(dv.precio * dv.cantidad - COALESCE(pcp.costo_promedio_unidad_base * dv.cantidad * dv.factor_conversion_usado,0)),0) as utilidad
                          FROM detalle_ventas dv
                          JOIN ventas v ON v.id=dv.venta_id
                          LEFT JOIN productos_costo_promedio pcp ON pcp.producto_id=dv.producto_id
                          WHERE DATE(v.fecha_y_hora)=? $where_suc_v");
    $st9->execute([$fecha]);
    $utilidad = (float)$st9->fetchColumn();

    // Dispensaciones controladas
    $st10 = $pdo->prepare("SELECT COUNT(*) as total, SUM(fue_omitida) as omitidas FROM ventas_recetas WHERE DATE(created_at)=?");
    $st10->execute([$fecha]);
    $dispensaciones = $st10->fetch(PDO::FETCH_ASSOC);

    json_success([
        'fecha' => $fecha,
        'ventas' => [
            'transacciones' => (int)$ventas['transacciones'],
            'total' => (float)$ventas['total'],
            'subtotal' => (float)$ventas['subtotal'],
            'impuestos' => (float)$ventas['impuestos'],
            'efectivo' => (float)$ventas['efectivo'],
            'tarjeta' => (float)$ventas['tarjeta'],
            'descuentos' => (float)$ventas['descuentos']
        ],
        'por_sucursal' => $porSucursal,
        'por_pago' => $porPago,
        'top_productos' => $topProductos,
        'gastos' => ['total' => (float)$gastos['total'], 'transacciones' => (int)$gastos['transacciones'], 'caja_chica' => $cajaChica],
        'gastos_categoria' => $gastosCat,
        'compras' => ['total' => (float)$compras['total'], 'transacciones' => (int)$compras['transacciones']],
        'utilidad' => $utilidad,
        'dispensaciones' => ['total' => (int)$dispensaciones['total'], 'omitidas' => (int)$dispensaciones['omitidas']]
    ]);
} catch (Exception $e) {
    json_error("Error: " . $e->getMessage());
}
