import { McpServer } from '@modelcontextprotocol/server';
import type { ComputerBackend } from './backend/computer-backend.js';
import { selectBackend } from './backend/select-backend.js';
import type { ChatGptComputerMcpConfig } from './config.js';
import { registerTools } from './tools/register-tools.js';

export const serverInfo = {
  name: '@alexcodeplace/chatgpt-computer-mcp',
  version: '0.2.0',
} as const;

export function createComputerMcpServer(
  config: Readonly<ChatGptComputerMcpConfig>,
  backend: ComputerBackend = selectBackend(config),
): McpServer {
  const server = new McpServer(serverInfo);
  server.server.onclose = () => { void backend.close?.(); };
  registerTools(server, backend);
  return server;
}

export function createComputerMcpServerFactory(
  config: Readonly<ChatGptComputerMcpConfig>,
  backend?: ComputerBackend,
): () => McpServer {
  return () => createComputerMcpServer(config, backend ?? selectBackend(config));
}
