import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
import { searchProduct, getProduct, getProductByBarcode } from "./services/open-food-facts.services.js";

console.log('🚀 Starting OpenFoodFacts MCP Server...');

const server = new McpServer({
  name: "OpenFoodFacts MCP Server",
  version: "1.0.0"
});

console.log('📦 Loading tools...');

server.tool("search-product-by-name",
  "Search for products by name",
  { query: z.string() },
  async ({ query }) => {
    const products = await searchProduct(query);
    return {
      content: [{ type: "text", text: String(products) }]
    }
  }
);

server.tool("search-product-by-barcode",
  "Search for products by barcode",
  { barcode: z.string() },
  async ({ barcode }) => {
    const product = await getProductByBarcode(barcode);
    return {
      content: [{ type: "text", text: String(product) }]
    }
  }
);

server.tool("get-product-by-id",
  "Get product by id",
  { id: z.string() },
  async ({ id }) => {
    const product = await getProduct(id);
    return {
      content: [{ type: "text", text: String(product) }]
    }
  }
);


console.log('🔌 Starting server...');

// Start receiving messages on stdin and sending messages on stdout
const transport = new StdioServerTransport();

try{
    await server.connect(transport);
    console.log('🔌 Server started successfully');
} catch (error) {
    console.error('🔌 Server failed to start:', error);
}