<?php
header('Content-Type: application/json; charset=utf-8');
require_once __DIR__ . '/../config/database.php';
require_once __DIR__ . '/../includes/helpers.php';

$pdo = getConnection();
$action = $_GET['action'] ?? '';
$sucursal_id = intval($_GET['sucursal_id'] ?? 0);

try {
    switch ($action) {

        // Summary counts for dashboard header
        case 'resumen':
            $whereSuc = $sucursal_id ? "AND sucursal_id=$sucursal_id" : '';

            // Stock bajo mínimo
            $s1 = $pdo->query("SELECT COUNT(*) FROM inventario_sucursal WHERE stock_total <= stock_minimo AND stock_minimo > 0 $whereSuc");
            $stock_bajo = intval($s1->fetchColumn());

            // Sin stock
            $s2 = $pdo->query("SELECT COUNT(*) FROM inventario_sucursal WHERE stock_total <= 0 $whereSuc");
            $sin_stock = intval($s2->fetchColumn());

            // Próximos a vencer (30 días - from compras_detalle)
            $s3 = $pdo->query("SELECT COUNT(*) FROM compras_detalle WHERE fecha_vencimiento IS NOT NULL
                AND fecha_vencimiento BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 30 DAY)
                AND fecha_vencimiento > '2000-01-01'");
            $por_vencer = intval($s3->fetchColumn());

            // Ya vencidos (lote table)
            $s4 = $pdo->query("SELECT COUNT(*) FROM lote WHERE fechavencimiento IS NOT NULL
                AND fechavencimiento < CURDATE() AND fechavencimiento > '2000-01-01'");
            $vencidos = intval($s4->fetchColumn());

            // Ajustes del mes
            $s5 = $pdo->query("SELECT COUNT(*) FROM ajustes_inventario
                WHERE fecha_ajuste >= DATE_SUB(NOW(), INTERVAL 30 DAY)");
            $ajustes_mes = intval($s5->fetchColumn());

            // Productos con receta controlada
            $s6 = $pdo->query("SELECT COUNT(*) FROM productos WHERE receta_controlada=1 AND estado=1");
            $controlados = intval($s6->fetchColumn());

            json_success([
                ['id'=>'stock_bajo','label'=>'Stock Bajo','count'=>$stock_bajo,'icon'=>'bi-exclamation-triangle','color'=>'#f97316','link'=>'stock_bajo'],
                ['id'=>'sin_stock','label'=>'Sin Stock','count'=>$sin_stock,'icon'=>'bi-x-circle','color'=>'#ef4444','link'=>'sin_stock'],
                ['id'=>'por_vencer','label'=>'Por Vencer (30d)','count'=>$por_vencer,'icon'=>'bi-calendar-exclamation','color'=>'#eab308','link'=>'vencimientos'],
                ['id'=>'vencidos','label'=>'Vencidos','count'=>$vencidos,'icon'=>'bi-calendar-x','color'=>'#dc2626','link'=>'vencidos'],
                ['id'=>'ajustes_mes','label'=>'Ajustes (30d)','count'=>$ajustes_mes,'icon'=>'bi-tools','color'=>'#8b5cf6','link'=>'ajustes'],
            ]);
            break;

        // Stock bajo mínimo
        case 'stock_bajo':
            $whereSuc = $sucursal_id ? "AND i.sucursal_id=$sucursal_id" : '';
            $s = $pdo->query("SELECT i.*, p.NombreComercial as producto, p.CodigoInterno as codigo,
                    s.nombre as sucursal, (i.stock_minimo - i.stock_total) as faltante
                FROM inventario_sucursal i
                JOIN productos p ON p.id=i.producto_id
                JOIN sucursales s ON s.id=i.sucursal_id
                WHERE i.stock_minimo > 0 AND i.stock_total <= i.stock_minimo $whereSuc
                ORDER BY faltante DESC, i.stock_total ASC LIMIT 200");
            json_success($s->fetchAll());
            break;

        // Sin stock (stock_total <= 0)
        case 'sin_stock':
            $whereSuc = $sucursal_id ? "AND i.sucursal_id=$sucursal_id" : '';
            $s = $pdo->query("SELECT i.*, p.NombreComercial as producto, p.CodigoInterno as codigo, p.CodigoBarra as barra,
                    s.nombre as sucursal, c.nombre as categoria
                FROM inventario_sucursal i
                JOIN productos p ON p.id=i.producto_id
                JOIN sucursales s ON s.id=i.sucursal_id
                LEFT JOIN categorias c ON c.id=p.id_categoria
                WHERE i.stock_total <= 0 $whereSuc
                ORDER BY p.NombreComercial LIMIT 200");
            json_success($s->fetchAll());
            break;

        // Próximos a vencer (from compras_detalle + lote)
        case 'vencimientos':
            $dias = max(1, min(365, intval($_GET['dias'] ?? 60)));
            $desde = $_GET['desde'] ?? date('Y-m-d');
            $hasta = date('Y-m-d', strtotime("+$dias days"));

            // From compras_detalle
            $s1 = $pdo->prepare("SELECT cd.id, cd.producto_id, p.NombreComercial as producto, p.CodigoInterno as codigo,
                    cd.fecha_vencimiento, cd.cantidad_unidades_base as cantidad,
                    DATEDIFF(cd.fecha_vencimiento, CURDATE()) as dias_restantes,
                    l.nombre as proveedor, 'compra' as origen
                FROM compras_detalle cd
                JOIN productos p ON p.id=cd.producto_id
                JOIN compras c ON c.id=cd.compra_id
                LEFT JOIN lugarcompra l ON l.id=c.id_lugarCompra
                WHERE cd.fecha_vencimiento IS NOT NULL
                    AND cd.fecha_vencimiento BETWEEN ? AND ?
                    AND cd.fecha_vencimiento > '2000-01-01'
                ORDER BY cd.fecha_vencimiento ASC LIMIT 100");
            $s1->execute([$desde, $hasta]);
            $compras = $s1->fetchAll();

            // From lote table
            $s2 = $pdo->prepare("SELECT l.id, l.producto_id, p.NombreComercial as producto, p.CodigoInterno as codigo,
                    l.fechavencimiento as fecha_vencimiento, 1 as cantidad,
                    DATEDIFF(l.fechavencimiento, CURDATE()) as dias_restantes,
                    l.codigo_lote as proveedor, 'lote' as origen
                FROM lote l
                JOIN productos p ON p.id=l.producto_id
                WHERE l.fechavencimiento IS NOT NULL
                    AND l.fechavencimiento BETWEEN ? AND ?
                    AND l.fechavencimiento > '2000-01-01'
                ORDER BY l.fechavencimiento ASC LIMIT 100");
            $s2->execute([$desde, $hasta]);

            $merged = array_merge($compras, $s2->fetchAll());
            usort($merged, fn($a, $b) => ($a['fecha_vencimiento'] ?? '') <=> ($b['fecha_vencimiento'] ?? ''));

            json_success(array_slice($merged, 0, 200));
            break;

        // Ya vencidos
        case 'vencidos':
            // From lote
            $s1 = $pdo->query("SELECT l.id, l.producto_id, p.NombreComercial as producto, p.CodigoInterno as codigo,
                    l.fechavencimiento as fecha_vencimiento, l.codigo_lote as lote,
                    DATEDIFF(CURDATE(), l.fechavencimiento) as dias_vencido
                FROM lote l
                JOIN productos p ON p.id=l.producto_id
                WHERE l.fechavencimiento IS NOT NULL AND l.fechavencimiento < CURDATE() AND l.fechavencimiento > '2000-01-01'
                ORDER BY l.fechavencimiento DESC LIMIT 100");
            $lotes = $s1->fetchAll();

            // From compras_detalle
            $s2 = $pdo->query("SELECT cd.id, cd.producto_id, p.NombreComercial as producto, p.CodigoInterno as codigo,
                    cd.fecha_vencimiento, cd.cantidad_unidades_base as cantidad,
                    DATEDIFF(CURDATE(), cd.fecha_vencimiento) as dias_vencido
                FROM compras_detalle cd
                JOIN productos p ON p.id=cd.producto_id
                WHERE cd.fecha_vencimiento IS NOT NULL AND cd.fecha_vencimiento < CURDATE() AND cd.fecha_vencimiento > '2000-01-01'
                ORDER BY cd.fecha_vencimiento DESC LIMIT 100");
            $compras = $s2->fetchAll();

            $merged = array_merge($lotes, $compras);
            usort($merged, fn($a, $b) => ($b['dias_vencido'] ?? 0) - ($a['dias_vencido'] ?? 0));

            json_success(array_slice($merged, 0, 200));
            break;

        // Ajustes recientes
        case 'ajustes':
            $s = $pdo->query("SELECT a.*, p.NombreComercial as producto, p.CodigoInterno as codigo,
                    s.nombre as sucursal, u.nombre as usuario
                FROM ajustes_inventario a
                JOIN productos p ON p.id=a.producto_id
                JOIN sucursales s ON s.id=a.sucursal_id
                LEFT JOIN usuarios u ON u.id=a.usuario_id
                ORDER BY a.fecha_ajuste DESC LIMIT 100");
            json_success($s->fetchAll());
            break;

        default:
            json_error('Accion no valida');
    }
} catch (Exception $e) {
    json_error('Error: '.$e->getMessage());
}
