package mcp

import (
	"fmt"
	"os"
	"strings"

	"github.com/engigu/taskpool/internal/mcp"
	imc "github.com/engigu/taskpool/internal/mcp"
)

// Run 启动 TaskPool MCP Server（stdio 模式）
// 环境变量（可选，默认使用本地服务器配置）:
//   TASKPOOL_URL     面板地址
//   TASKPOOL_TOKEN   OpenAPI Token
func Run(args []string) {
	for _, a := range args {
		if a == "-h" || a == "--help" {
			printHelp()
			return
		}
	}

	// 使用内部 OpenAPI 客户端（自动获取服务器地址和 Token）
	client := imc.GetOpenAPIClient()
	fmt.Fprintf(os.Stderr, "[taskpool-mcp] stdio mode, url=%s token=%s\n", client.BaseURL, maskToken(client.Token))

	s := mcp.GetServer()
	// 设置外部客户端（用于连接远程服务器）
	if client.Token != "" {
		mcp.SetExternalClient(client)
	}

	if err := mcp.ServeStdio(s); err != nil {
		fmt.Fprintf(os.Stderr, "[taskpool-mcp] error: %v\n", err)
		os.Exit(1)
	}
}

func maskToken(t string) string {
	t = strings.TrimSpace(t)
	if t == "" {
		return "(empty)"
	}
	if len(t) <= 8 {
		return "****"
	}
	return t[:4] + "****" + t[len(t)-4:]
}

func printHelp() {
	fmt.Fprintf(os.Stderr, `
TaskPool MCP Server

MCP Server 已内置在后端服务中：
  HTTP 端点: http://your-server:8052/mcp

此命令仅用于 stdio 模式（Claude Desktop / Cursor 等）。

用法:
  taskpool mcp

环境变量（可选）:
  TASKPOOL_URL     面板地址（默认使用本机）
  TASKPOOL_TOKEN   OpenAPI Token（默认从系统设置读取）

Agent 配置:
  HTTP 模式（Hermes / OpenClaw）:
    {
      "mcpServers": {
        "taskpool": {
          "url": "http://your-server:8052/mcp",
          "headers": {
            "Authorization": "Bearer 你的Token"
          }
        }
      }
    }

  stdio 模式（Claude Desktop / Cursor）:
    {
      "mcpServers": {
        "taskpool": {
          "command": "taskpool",
          "args": ["mcp"]
        }
      }
    }

前置条件:
  系统设置 → 启用 OpenAPI → 生成 Token
`)
}
