import {McpServer} from "@modelcontextprotocol/sdk/server/mcp.js";
import {StdioServerTransport} from "@modelcontextprotocol/sdk/server/stdio.js";
import {createClient} from "@hey-api/client-fetch";
import {getCurrentUserOrOrg, registerWebTools} from "./tools/web_tools.js";
import {registerDataTools} from "./tools/data_tools.js";
import {registerPriceTools} from "./tools/price_tools.js";
import {registerProcessorTools} from "./tools/processor_tools.js";
import {registerAlertsTools} from "./tools/alerts_tools.js";
import {registerDebugSimulationTools} from "./tools/debug_simulation_tools.js";

export async function setupServer(options: any) {
    const client = createClient({
        baseUrl: options.host,
    })
    client.interceptors.request.use((request) => {
        if (options.apiKey) {
            request.headers.set("api-key", options.apiKey)
        } else if (options.token) {
            request.headers.set("Authorization", `Bearer ${options.token}`)
        }
        return request
    })

    const server = new McpServer({
        name: "sentio-api",
        version: "1.0.0",
        capabilities: {
            resources: {},
            tools: {},
        },
    });

    registerWebTools(server, client, options);
    registerDataTools(server, client, options);
    registerPriceTools(server, client, options);
    registerAlertsTools(server, client, options);
    registerProcessorTools(server, client, options);
    registerDebugSimulationTools(server, client, options);

    const { user, org } = await getCurrentUserOrOrg(client);
    console.error("Logged in as", user?.username ?? org?.name)
    const userId = user?.id
    const orgId = org?.id
    return { server, userId, orgId };
}

export async function runStart(argv: string[], options: any) {
    const { server } = await setupServer(options);

    const transport = new StdioServerTransport();
    await server.connect(transport);
    console.error("MCP Server running on stdio");
}

