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

$pdo = getConnection();

try {
    $where = []; $params = [];
    $top = isset($_GET['top']) ? min((int)$_GET['top'], 100) : 20;
    $sucursal_id = intval($_GET['sucursal_id'] ?? 0);
    $where_suc = $sucursal_id ? "AND v.sucursal_id=$sucursal_id" : '';

    if (!empty($_GET['fecha_desde'])) { $where[] = "v.fecha_y_hora >= ?"; $params[] = $_GET['fecha_desde']; }
    if (!empty($_GET['fecha_hasta'])) { $where[] = "v.fecha_y_hora <= ?"; $params[] = $_GET['fecha_hasta']; }
    $wc = count($where) ? 'AND ' . implode(' AND ', $where) : '';

    // Profit by product (top 20 by profit)
    $sql = "SELECT p.id, p.NombreComercial as producto, p.CodigoInterno as codigo, 
                   SUM(dv.cantidad) as qty,
                   COALESCE(SUM(dv.precio * dv.cantidad),0) as venta_total,
                   COALESCE(SUM(pcp.costo_promedio_unidad_base * dv.cantidad * dv.factor_conversion_usado),0) as costo_total,
                   COALESCE(SUM(dv.precio * dv.cantidad - pcp.costo_promedio_unidad_base * dv.cantidad * dv.factor_conversion_usado),0) as utilidad
            FROM detalle_ventas dv
            JOIN ventas v ON v.id = dv.venta_id
            JOIN productos p ON p.id = dv.producto_id
            LEFT JOIN productos_costo_promedio pcp ON pcp.producto_id = dv.producto_id
            WHERE 1=1 $wc $where_suc
            GROUP BY dv.producto_id 
            HAVING qty > 0
            ORDER BY utilidad DESC LIMIT $top";
    $st = $pdo->prepare($sql); $st->execute($params);
    $topProductos = $st->fetchAll(PDO::FETCH_ASSOC);

    // Monthly profit trend
    $sql2 = "SELECT DATE_FORMAT(v.fecha_y_hora,'%Y-%m') as mes,
                    COALESCE(SUM(v.total),0) as ventas,
                    COALESCE(SUM(pcp.costo_promedio_unidad_base * dv.cantidad * dv.factor_conversion_usado),0) as costo,
                    COALESCE(SUM(v.total - pcp.costo_promedio_unidad_base * dv.cantidad * dv.factor_conversion_usado),0) as utilidad
             FROM ventas v
             JOIN detalle_ventas dv ON dv.venta_id = v.id
             LEFT JOIN productos_costo_promedio pcp ON pcp.producto_id = dv.producto_id
             WHERE 1=1 $where_suc
             GROUP BY DATE_FORMAT(v.fecha_y_hora,'%Y-%m') ORDER BY mes DESC LIMIT 12";
    $st2 = $pdo->prepare($sql2); $st2->execute();
    $tendencia = $st2->fetchAll(PDO::FETCH_ASSOC);

    // Total profit for period
    $sql3 = "SELECT COALESCE(SUM(dv.precio * dv.cantidad - COALESCE(pcp.costo_promedio_unidad_base * dv.cantidad * dv.factor_conversion_usado, 0)),0) as total_utilidad,
                    COALESCE(SUM(dv.precio * dv.cantidad),0) as total_ventas,
                    COALESCE(SUM(pcp.costo_promedio_unidad_base * dv.cantidad * dv.factor_conversion_usado),0) as total_costo
             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 1=1 $wc $where_suc";
    $st3 = $pdo->prepare($sql3); $st3->execute($params);
    $totales = $st3->fetch(PDO::FETCH_ASSOC);

    json_success([
        'top_productos' => $topProductos,
        'tendencia_mensual' => $tendencia,
        'totales' => [
            'utilidad' => (float)($totales['total_utilidad'] ?? 0),
            'ventas' => (float)($totales['total_ventas'] ?? 0),
            'costo' => (float)($totales['total_costo'] ?? 0),
            'margen' => ($totales['total_ventas'] ?? 0) > 0 ? round((($totales['total_utilidad'] ?? 0) / ($totales['total_ventas'] ?? 0)) * 100, 1) : 0
        ]
    ]);
} catch (Exception $e) {
    json_error("Error: " . $e->getMessage());
}
