const { z } = require("zod");
const itemHandler = require("../handlers/item.handler.js");
const categoriaHandler = require("../handlers/categoria.handler.js");
function registerAllTools(server) {
server.registerTool(
"listar_items",
{
description: "Lista todos los items del inventario, opcionalmente filtrados por categoría",
inputSchema: {
categoria: z
.string()
.optional()
.describe("Categoría para filtrar (opcional). Ej: 'Electrónica', 'Papelería', 'Muebles'"),
},
},
async (args) => itemHandler.listarItems(args)
);
server.registerTool(
"buscar_item",
{
description: "Busca un item específico por nombre (búsqueda parcial, case-insensitive)",
inputSchema: {
nombre: z
.string()
.describe("Nombre o parte del nombre del item a buscar"),
},
},
async (args) => itemHandler.buscarItem(args)
);
server.registerTool(
"contar_items",
{
description: "Cuenta el total de items en inventario, con cantidad total y valor total",
inputSchema: {},
},
async () => itemHandler.contarItems()
);
server.registerTool(
"crear_items",
{
description: "Crear uno o más items en el inventario",
inputSchema: {
items: z
.array(
z.object({
nombre: z.string().describe("Nombre del item"),
categoria: z.string().describe("Categoría del item"),
cantidad: z.number().describe("Cantidad del item"),
precio: z.number().describe("Precio unitario del item"),
})
)
.describe("Lista de items a crear"),
},
},
async (args) => itemHandler.crearItems(args)
);
server.registerTool(
"eliminar_item",
{
description: "Elimina un item del inventario por su ID de MongoDB (_id)",
inputSchema: {
id: z
.string()
.describe("ID de MongoDB del item a eliminar (formato: ObjectId en string)"),
},
},
async (args) => itemHandler.eliminarItem(args)
);
server.registerTool(
"actualizar_item",
{
description: "Actualiza la información de un item existente por su ID de MongoDB (_id)",
inputSchema: {
id: z
.string()
.describe("ID de MongoDB del item a actualizar (formato: ObjectId en string)"),
nombre: z
.string()
.optional()
.describe("Nuevo nombre del item (opcional)"),
categoria: z
.string()
.optional()
.describe("Nueva categoría del item (opcional)"),
cantidad: z
.number()
.optional()
.describe("Nueva cantidad del item (opcional)"),
precio: z
.number()
.optional()
.describe("Nuevo precio del item (opcional)"),
},
},
async (args) => itemHandler.actualizarItem(args)
);
// ==================== CATEGORÍAS ====================
server.registerTool(
"listar_categorias",
{
description: "Lista todas las categorías disponibles en el inventario",
inputSchema: {},
},
async () => categoriaHandler.listarCategorias()
);
server.registerTool(
"crear_categorias",
{
description: "Crea nuevas categorías en el inventario, 1 o más a la vez. Cada categoría solo necesita un nombre (ej: 'Electrónica', 'Deportes')",
inputSchema: {
categorias: z
.array(
z.object({
nombre: z.string().describe("Nombre de la categoría a crear"),
})
)
.describe("Lista de categorías a crear. Ejemplo: [{\"nombre\": \"Electrodomésticos\"}, {\"nombre\": \"Deportes\"}]"),
},
},
async (args) => categoriaHandler.crearCategorias(args)
);
}
module.exports = {
registerAllTools,
};