<?php
if (!defined('BASEPATH')) {
    http_response_code(403);
    die(json_encode(["success" => false, "message" => "Acceso directo no permitido"]));
}

switch ($tipo) {
    case 'getIngredientesParaConteo':
        $sql = "SELECT id, nombre, unidad, cantidad as stock FROM ingredientes WHERE activo = 1 ORDER BY nombre";
        $r = mysqli_query($conn, $sql);
        if (!$r) {
            sendResponse(false, "Error: " . mysqli_error($conn));
        }
        $items = [];
        while ($row = mysqli_fetch_assoc($r)) {
            $items[] = [
                'id' => (int)$row['id'],
                'nombre' => $row['nombre'],
                'unidad' => $row['unidad'],
                'stock_sistema' => (float)$row['stock']
            ];
        }
        sendResponse(true, "OK", $items);
        break;

    case 'registrarConteoIngredientes':
        $items = isset($datapost['items']) ? $datapost['items'] : [];
        $notas = isset($datapost['notas']) ? mysqli_real_escape_string($conn, $datapost['notas']) : '';
        $usuario_id = isset($datapost['usuario_id']) ? (int)$datapost['usuario_id'] : 0;
        $usuario_nombre = isset($datapost['usuario_nombre']) ? mysqli_real_escape_string($conn, $datapost['usuario_nombre']) : '';
        $sucursal = isset($datapost['sucursal']) ? mysqli_real_escape_string($conn, $datapost['sucursal']) : '';
        $ajustar_stock = isset($datapost['ajustar_stock']) ? (bool)$datapost['ajustar_stock'] : false;

        if (empty($items)) {
            sendResponse(false, "No hay items para registrar");
        }

        mysqli_begin_transaction($conn);
        try {
            // Crear conteo
            $sql = "INSERT INTO conteos_ingredientes (fecha, usuario_id, usuario_nombre, sucursal, notas)
                    VALUES (NOW(), $usuario_id, '$usuario_nombre', '$sucursal', '$notas')";
            if (!mysqli_query($conn, $sql)) {
                throw new Exception("Error al crear conteo: " . mysqli_error($conn));
            }
            $conteo_id = mysqli_insert_id($conn);

            // Insertar detalle y opcionalmente ajustar stock
            foreach ($items as $item) {
                $ing_id = (int)$item['ingrediente_id'];
                $stock_fisico = (float)$item['stock_fisico'];
                $ing_nombre = mysqli_real_escape_string($conn, $item['nombre'] ?? '');
                $unidad = mysqli_real_escape_string($conn, $item['unidad'] ?? '');

                // Obtener stock sistema actual
                $r = mysqli_query($conn, "SELECT cantidad FROM ingredientes WHERE id = $ing_id");
                $row = mysqli_fetch_assoc($r);
                $stock_sistema = $row ? (float)$row['cantidad'] : 0;
                $diferencia = round($stock_fisico - $stock_sistema, 2);

                $sql = "INSERT INTO conteo_ingredientes_detalle (conteo_id, ingrediente_id, ingrediente_nombre, stock_sistema, stock_fisico, diferencia, unidad)
                        VALUES ($conteo_id, $ing_id, '$ing_nombre', $stock_sistema, $stock_fisico, $diferencia, '$unidad')";
                if (!mysqli_query($conn, $sql)) {
                    throw new Exception("Error al insertar detalle: " . mysqli_error($conn));
                }

                // Ajustar stock si se solicita
                if ($ajustar_stock) {
                    $sql = "UPDATE ingredientes SET cantidad = $stock_fisico WHERE id = $ing_id";
                    if (!mysqli_query($conn, $sql)) {
                        throw new Exception("Error al ajustar stock: " . mysqli_error($conn));
                    }
                }
            }

            mysqli_commit($conn);
            sendResponse(true, "Conteo registrado correctamente", ['conteo_id' => $conteo_id]);
        } catch (Exception $e) {
            mysqli_rollback($conn);
            sendResponse(false, $e->getMessage());
        }
        break;

    case 'getConteosIngredientes':
        $sucursal = isset($datapost['sucursal']) ? mysqli_real_escape_string($conn, $datapost['sucursal']) : '';
        $limit = isset($datapost['limit']) ? (int)$datapost['limit'] : 20;

        $sql = "SELECT c.*,
                    (SELECT COUNT(*) FROM conteo_ingredientes_detalle WHERE conteo_id = c.id) as total_items,
                    (SELECT COUNT(*) FROM conteo_ingredientes_detalle WHERE conteo_id = c.id AND ABS(diferencia) > 0.01) as con_diferencia
                FROM conteos_ingredientes c";
        if (!empty($sucursal)) $sql .= " WHERE c.sucursal = '$sucursal'";
        $sql .= " ORDER BY c.fecha DESC LIMIT $limit";

        $r = mysqli_query($conn, $sql);
        if (!$r) {
            sendResponse(false, "Error: " . mysqli_error($conn));
        }
        $conteos = [];
        while ($row = mysqli_fetch_assoc($r)) {
            $conteos[] = [
                'id' => (int)$row['id'],
                'fecha' => $row['fecha'],
                'usuario_nombre' => $row['usuario_nombre'],
                'sucursal' => $row['sucursal'],
                'notas' => $row['notas'],
                'total_items' => (int)$row['total_items'],
                'con_diferencia' => (int)$row['con_diferencia'],
            ];
        }
        sendResponse(true, "OK", $conteos);
        break;

    case 'getConteoIngredienteDetalle':
        $conteo_id = isset($datapost['conteo_id']) ? (int)$datapost['conteo_id'] : 0;
        if ($conteo_id <= 0) {
            sendResponse(false, "ID de conteo invalido");
        }

        // Info del conteo
        $r = mysqli_query($conn, "SELECT * FROM conteos_ingredientes WHERE id = $conteo_id");
        $conteo = mysqli_fetch_assoc($r);
        if (!$conteo) {
            sendResponse(false, "Conteo no encontrado");
        }

        // Detalle
        $r = mysqli_query($conn, "SELECT * FROM conteo_ingredientes_detalle WHERE conteo_id = $conteo_id ORDER BY ingrediente_nombre");
        $items = [];
        while ($row = mysqli_fetch_assoc($r)) {
            $items[] = [
                'ingrediente_id' => (int)$row['ingrediente_id'],
                'nombre' => $row['ingrediente_nombre'],
                'unidad' => $row['unidad'],
                'stock_sistema' => (float)$row['stock_sistema'],
                'stock_fisico' => (float)$row['stock_fisico'],
                'diferencia' => (float)$row['diferencia'],
            ];
        }

        sendResponse(true, "OK", [
            'conteo' => [
                'id' => (int)$conteo['id'],
                'fecha' => $conteo['fecha'],
                'usuario_nombre' => $conteo['usuario_nombre'],
                'sucursal' => $conteo['sucursal'],
                'notas' => $conteo['notas'],
            ],
            'items' => $items
        ]);
        break;

    default:
        sendResponse(false, "Operacion no valida en InventarioIngredientes");
        break;
}
