import { z } from "zod";
import { RohlikAPI } from "../rohlik-api.js";
export function createOrderDetailTool(createRohlikAPI: () => RohlikAPI) {
return {
name: "get_order_detail",
definition: {
title: "Get Order Detail",
description: "Get comprehensive detailed information about a specific order by its ID, including all available data fields",
inputSchema: {
orderId: z.string().describe("The order ID to fetch details for")
}
},
handler: async (args: { orderId: string }) => {
const { orderId } = args;
try {
const api = createRohlikAPI();
const orderDetail = await api.getOrderDetail(orderId);
if (!orderDetail) {
return {
content: [
{
type: "text" as const,
text: `Order with ID ${orderId} not found.`
}
]
};
}
const formatProduct = (product: any, index: number): string => {
// Základní informace o produktu
const name = product.productName || product.name || 'Unknown product';
const id = product.id || product.productId || 'N/A';
const brand = product.brand || '';
const quantity = product.quantity || 1;
// Cenové informace
const unitPrice = product.price || 0;
const totalPrice = product.totalPrice || (unitPrice * quantity) || 0;
return ` ${index + 1}. ${name}${brand ? ` (${brand})` : ''}
📋 Product ID: ${id}
📦 Quantity: ${quantity}
💰 Unit Price: ${unitPrice} CZK
💰 Total Price: ${totalPrice} CZK`;
};
const formatOrderDetails = (order: any, orderId: string): string => {
// Základní identifikace objednávky
const id = order.id || orderId;
const orderNumber = order.orderNumber || id;
// Časové údaje
const createdAt = order.createdAt || 'N/A';
const deliveredAt = order.deliveredAt || 'N/A';
const deliveryDate = order.deliveryDate || 'N/A';
// Cenové údaje
const totalPrice = order.totalPrice || order.price || 0;
const priceInfo = order.totalPrice && order.price && order.totalPrice !== order.price
? `${totalPrice} CZK (original: ${order.price} CZK)`
: `${totalPrice} CZK`;
// Status objednávky
const status = order.status || 'Unknown';
// Produkty
const products = order.products || order.items || [];
// Statistiky produktů
const totalItems = products.reduce((sum: number, p: any) => sum + (p.quantity || 1), 0);
const uniqueProducts = products.length;
// Debug informace - zobrazí všechny dostupné klíče
const availableFields = Object.keys(order).join(', ');
return `📦 DETAILNÍ INFORMACE O OBJEDNÁVCE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🆔 IDENTIFIKACE
Order ID: ${id}
Order Number: ${orderNumber}
Status: ${status}
📅 ČASOVÉ ÚDAJE
Created: ${createdAt}
Delivery Date: ${deliveryDate}
Delivered: ${deliveredAt}
💰 CENOVÉ ÚDAJE
Total Price: ${priceInfo}
📊 PŘEHLED PRODUKTŮ
Unique Products: ${uniqueProducts}
Total Items: ${totalItems}
📋 SEZNAM PRODUKTŮ:
${products.length > 0 ? products.map(formatProduct).join('\n\n') : ' No products found'}
🔍 DEBUG INFO
Available fields: ${availableFields}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💰 CELKOVÁ CENA: ${totalPrice} CZK
📦 CELKEM POLOŽEK: ${totalItems}`;
};
const output = formatOrderDetails(orderDetail, orderId);
return {
content: [
{
type: "text" as const,
text: output
}
]
};
} catch (error) {
return {
content: [
{
type: "text" as const,
text: error instanceof Error ? error.message : String(error)
}
],
isError: true
};
}
}
};
}