#!/usr/bin/env node

import {McpServer} from "@modelcontextprotocol/sdk/server/mcp.js";
import {StdioServerTransport} from "@modelcontextprotocol/sdk/server/stdio.js";
import logger from './utils/logger.js';
import {registerGetIndexTemperature} from "./tools/getIndexTemperature.js";

import mockAllBaseInfo from './services/mockAllBaseInfo.js';

// 创建MCP服务器
const server = new McpServer({
    name: "mcp-invest-assistant",
    description: "投资助手，理财分析师",
    version: "0.0.6",
    capabilities: {
        resources: {},
        tools: {},
    }
});


// 灌入基础数据：这里暂时不使用，直接使用提前下载好的数据喂给LLM
// async function getBaseData() {
//     logger.info('start get index base data...');
//     const allPromise = Object.values(MARKET).map((market) => getIndexBaseInfo({market}));
//     const resBody = await Promise.all(allPromise);
//     const allIndexData = Object.keys(MARKET).map((marketCn, index) => {
//         return {
//             marketCn: marketCn,
//             data: resBody?.[index]?.data
//         }
//     });
//     logger.info(`get index base data success: ${JSON.stringify(allIndexData)}`);
//     return allIndexData;
// }
// const allIndexData = await getBaseData();

server.resource('allIndexData', 'data://all-index-data', async (uri) => ({
    contents: [{uri: uri.href, text: JSON.stringify(mockAllBaseInfo)}],
}));


async function startServer() {
    try {
        logger.info('Registering tools...');

        // 注册所有工具
        // registerSayHello(server);
        registerGetIndexTemperature(server);
        logger.info('Tools registered successfully');

        // 启动MCP服务器
        logger.info('Starting MCP server with StdioServerTransport...');
        const transport = new StdioServerTransport();

        await server.connect(transport);
        logger.info('MCP server connected successfully');
    } catch (error: unknown) {
        const err = error as Error;
        logger.error(`MCP server startup failed: ${err.message}`);
        logger.error(`Stack trace: ${err.stack}`);
        console.error('服务器启动失败:', err);
        process.exit(1);
    }
}

logger.info('mcp-invest-assistant start success!');
startServer();
