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

switch ($tipo) {
    case 'getIngredientes':
        $sql = "SELECT * FROM ingredientes WHERE activo = 1 ORDER BY nombre ASC";
        $result = mysqli_query($conn, $sql);

        if ($result) {
            $ingredientes = [];
            while ($row = mysqli_fetch_assoc($result)) {
                $ingredientes[] = [
                    'id' => (int)$row['id'],
                    'nombre' => $row['nombre'],
                    'cantidad' => (float)$row['cantidad'],
                    'unidad' => $row['unidad'],
                    'precio' => (float)$row['precio'],
                    'proveedor' => $row['proveedor'],
                    'stockMinimo' => (float)$row['stock_minimo'],
                    'categoria' => $row['categoria']
                ];
            }
            sendResponse(true, "Ingredientes obtenidos", $ingredientes);
        } else {
            sendResponse(false, "Error al obtener ingredientes: " . mysqli_error($conn));
        }
        break;

    case 'getIngrediente':
        $id = isset($datapost['id']) ? (int)$datapost['id'] : 0;

        if ($id <= 0) {
            sendResponse(false, "ID de ingrediente no válido");
        }

        $sql = "SELECT * FROM ingredientes WHERE id = $id AND activo = 1";
        $result = mysqli_query($conn, $sql);

        if ($result && mysqli_num_rows($result) > 0) {
            $row = mysqli_fetch_assoc($result);
            $ingrediente = [
                'id' => (int)$row['id'],
                'nombre' => $row['nombre'],
                'cantidad' => (float)$row['cantidad'],
                'unidad' => $row['unidad'],
                'precio' => (float)$row['precio'],
                'proveedor' => $row['proveedor'],
                'stockMinimo' => (float)$row['stock_minimo'],
                'categoria' => $row['categoria']
            ];
            sendResponse(true, "Ingrediente encontrado", $ingrediente);
        } else {
            sendResponse(false, "Ingrediente no encontrado");
        }
        break;

    case 'crearIngrediente':
        $nombre = isset($datapost['nombre']) ? mysqli_real_escape_string($conn, $datapost['nombre']) : '';
        $cantidad = isset($datapost['cantidad']) ? (float)$datapost['cantidad'] : 0;
        $unidad = isset($datapost['unidad']) ? mysqli_real_escape_string($conn, $datapost['unidad']) : '';
        $precio = isset($datapost['precio']) ? (float)$datapost['precio'] : 0;
        $proveedor = isset($datapost['proveedor']) ? mysqli_real_escape_string($conn, $datapost['proveedor']) : '';
        $stockMinimo = isset($datapost['stockMinimo']) ? (float)$datapost['stockMinimo'] : 0;
        $categoria = isset($datapost['categoria']) ? mysqli_real_escape_string($conn, $datapost['categoria']) : 'Otros';

        if (empty($nombre)) {
            sendResponse(false, "El nombre es requerido");
        }

        if (empty($unidad)) {
            sendResponse(false, "La unidad es requerida");
        }

        $sql = "INSERT INTO ingredientes (nombre, cantidad, unidad, precio, proveedor, stock_minimo, categoria)
                VALUES ('$nombre', $cantidad, '$unidad', $precio, '$proveedor', $stockMinimo, '$categoria')";

        if (mysqli_query($conn, $sql)) {
            $nuevoId = mysqli_insert_id($conn);
            sendResponse(true, "Ingrediente creado correctamente", ['id' => $nuevoId]);
        } else {
            sendResponse(false, "Error al crear ingrediente: " . mysqli_error($conn));
        }
        break;

    case 'actualizarIngrediente':
        $id = isset($datapost['id']) ? (int)$datapost['id'] : 0;
        $nombre = isset($datapost['nombre']) ? mysqli_real_escape_string($conn, $datapost['nombre']) : '';
        $cantidad = isset($datapost['cantidad']) ? (float)$datapost['cantidad'] : 0;
        $unidad = isset($datapost['unidad']) ? mysqli_real_escape_string($conn, $datapost['unidad']) : '';
        $precio = isset($datapost['precio']) ? (float)$datapost['precio'] : 0;
        $proveedor = isset($datapost['proveedor']) ? mysqli_real_escape_string($conn, $datapost['proveedor']) : '';
        $stockMinimo = isset($datapost['stockMinimo']) ? (float)$datapost['stockMinimo'] : 0;
        $categoria = isset($datapost['categoria']) ? mysqli_real_escape_string($conn, $datapost['categoria']) : 'Otros';

        if ($id <= 0) {
            sendResponse(false, "ID de ingrediente no válido");
        }

        if (empty($nombre)) {
            sendResponse(false, "El nombre es requerido");
        }

        $sql = "UPDATE ingredientes SET
                nombre = '$nombre',
                cantidad = $cantidad,
                unidad = '$unidad',
                precio = $precio,
                proveedor = '$proveedor',
                stock_minimo = $stockMinimo,
                categoria = '$categoria',
                updated_at = NOW()
                WHERE id = $id";

        if (mysqli_query($conn, $sql)) {
            sendResponse(true, "Ingrediente actualizado correctamente");
        } else {
            sendResponse(false, "Error al actualizar ingrediente: " . mysqli_error($conn));
        }
        break;

    case 'eliminarIngrediente':
        $id = isset($datapost['id']) ? (int)$datapost['id'] : 0;

        if ($id <= 0) {
            sendResponse(false, "ID de ingrediente no válido");
        }

        // Soft delete
        $sql = "UPDATE ingredientes SET activo = 0, updated_at = NOW() WHERE id = $id";

        if (mysqli_query($conn, $sql)) {
            sendResponse(true, "Ingrediente eliminado correctamente");
        } else {
            sendResponse(false, "Error al eliminar ingrediente: " . mysqli_error($conn));
        }
        break;

    case 'getCategoriasIngredientes':
        $sql = "SELECT * FROM categorias_ingredientes WHERE activo = 1 ORDER BY nombre ASC";
        $result = mysqli_query($conn, $sql);

        if ($result) {
            $categorias = [];
            while ($row = mysqli_fetch_assoc($result)) {
                $categorias[] = $row['nombre'];
            }
            sendResponse(true, "Categorías obtenidas", $categorias);
        } else {
            sendResponse(false, "Error al obtener categorías: " . mysqli_error($conn));
        }
        break;

    case 'getCategoriasIngredientesDetalle':
        $sql = "SELECT ci.*, (SELECT COUNT(*) FROM ingredientes i WHERE i.categoria = ci.nombre AND i.activo = 1) as total_ingredientes
                FROM categorias_ingredientes ci WHERE ci.activo = 1 ORDER BY ci.nombre ASC";
        $result = mysqli_query($conn, $sql);

        if ($result) {
            $categorias = [];
            while ($row = mysqli_fetch_assoc($result)) {
                $categorias[] = [
                    'id' => (int)$row['id'],
                    'nombre' => $row['nombre'],
                    'total_ingredientes' => (int)$row['total_ingredientes']
                ];
            }
            sendResponse(true, "Categorías obtenidas", $categorias);
        } else {
            sendResponse(false, "Error al obtener categorías: " . mysqli_error($conn));
        }
        break;

    case 'crearCategoriaIngrediente':
        $nombre = isset($datapost['nombre']) ? mysqli_real_escape_string($conn, $datapost['nombre']) : '';

        if (empty($nombre)) {
            sendResponse(false, "El nombre es requerido");
        }

        $checkSql = "SELECT id FROM categorias_ingredientes WHERE nombre = '$nombre' AND activo = 1";
        $checkResult = mysqli_query($conn, $checkSql);
        if ($checkResult && mysqli_num_rows($checkResult) > 0) {
            sendResponse(false, "Ya existe una categoría con ese nombre");
        }

        $sql = "INSERT INTO categorias_ingredientes (nombre) VALUES ('$nombre')";

        if (mysqli_query($conn, $sql)) {
            $nuevoId = mysqli_insert_id($conn);
            sendResponse(true, "Categoría creada correctamente", ['id' => $nuevoId]);
        } else {
            sendResponse(false, "Error al crear categoría: " . mysqli_error($conn));
        }
        break;

    case 'actualizarCategoriaIngrediente':
        $id = isset($datapost['id']) ? (int)$datapost['id'] : 0;
        $nombre = isset($datapost['nombre']) ? mysqli_real_escape_string($conn, $datapost['nombre']) : '';

        if ($id <= 0) {
            sendResponse(false, "ID de categoría no válido");
        }

        if (empty($nombre)) {
            sendResponse(false, "El nombre es requerido");
        }

        $checkSql = "SELECT id FROM categorias_ingredientes WHERE nombre = '$nombre' AND id != $id AND activo = 1";
        $checkResult = mysqli_query($conn, $checkSql);
        if ($checkResult && mysqli_num_rows($checkResult) > 0) {
            sendResponse(false, "Ya existe otra categoría con ese nombre");
        }

        // Obtener el nombre anterior para actualizar ingredientes
        $oldSql = "SELECT nombre FROM categorias_ingredientes WHERE id = $id";
        $oldResult = mysqli_query($conn, $oldSql);
        $oldRow = mysqli_fetch_assoc($oldResult);
        $nombreAnterior = mysqli_real_escape_string($conn, $oldRow['nombre']);

        $sql = "UPDATE categorias_ingredientes SET nombre = '$nombre', updated_at = NOW() WHERE id = $id";

        if (mysqli_query($conn, $sql)) {
            // Actualizar el nombre de categoría en los ingredientes que la usan
            mysqli_query($conn, "UPDATE ingredientes SET categoria = '$nombre' WHERE categoria = '$nombreAnterior'");
            sendResponse(true, "Categoría actualizada correctamente");
        } else {
            sendResponse(false, "Error al actualizar categoría: " . mysqli_error($conn));
        }
        break;

    case 'eliminarCategoriaIngrediente':
        $id = isset($datapost['id']) ? (int)$datapost['id'] : 0;

        if ($id <= 0) {
            sendResponse(false, "ID de categoría no válido");
        }

        // Verificar si hay ingredientes usando esta categoría
        $checkSql = "SELECT ci.nombre FROM categorias_ingredientes ci WHERE ci.id = $id";
        $checkResult = mysqli_query($conn, $checkSql);
        $catRow = mysqli_fetch_assoc($checkResult);
        $catNombre = mysqli_real_escape_string($conn, $catRow['nombre']);

        $usageSql = "SELECT COUNT(*) as total FROM ingredientes WHERE categoria = '$catNombre' AND activo = 1";
        $usageResult = mysqli_query($conn, $usageSql);
        $usageRow = mysqli_fetch_assoc($usageResult);

        if ((int)$usageRow['total'] > 0) {
            sendResponse(false, "No se puede eliminar: hay " . $usageRow['total'] . " ingrediente(s) usando esta categoría");
        }

        $sql = "UPDATE categorias_ingredientes SET activo = 0, updated_at = NOW() WHERE id = $id";

        if (mysqli_query($conn, $sql)) {
            sendResponse(true, "Categoría eliminada correctamente");
        } else {
            sendResponse(false, "Error al eliminar categoría: " . mysqli_error($conn));
        }
        break;

    case 'getUnidades':
        $sql = "SELECT * FROM unidades_medida WHERE activo = 1 ORDER BY nombre ASC";
        $result = mysqli_query($conn, $sql);

        if ($result) {
            $unidades = [];
            while ($row = mysqli_fetch_assoc($result)) {
                $unidades[] = $row['abreviatura'];
            }
            sendResponse(true, "Unidades obtenidas", $unidades);
        } else {
            sendResponse(false, "Error al obtener unidades: " . mysqli_error($conn));
        }
        break;

    default:
        sendResponse(false, "Operación no válida en Ingredientes");
        break;
}
