package mcp

import (
	"context"
	"fmt"

	"github.com/mark3labs/mcp-go/mcp"
	"github.com/mark3labs/mcp-go/server"
)

// Server wraps the mcp-go server with KorAP-specific functionality
type Server struct {
	mcpServer *server.MCPServer
	name      string
	version   string
}

// NewServer creates a new KorAP MCP server
func NewServer(name, version string) *Server {
	mcpServer := server.NewMCPServer(
		name,
		version,
		server.WithToolCapabilities(true),
	)

	return &Server{
		mcpServer: mcpServer,
		name:      name,
		version:   version,
	}
}

// AddTool registers a new tool with the server
func (s *Server) AddTool(name, description string, inputSchema map[string]any, handler func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error)) error {
	if name == "" {
		return fmt.Errorf("tool name cannot be empty")
	}
	if description == "" {
		return fmt.Errorf("tool description cannot be empty")
	}

	// Create tool using mcp-go's NewTool function
	tool := mcp.NewTool(name, mcp.WithDescription(description))

	// Add the tool and handler to the MCP server
	s.mcpServer.AddTool(tool, handler)

	return nil
}

// Serve starts the MCP server using stdio transport
func (s *Server) Serve() error {
	return server.ServeStdio(s.mcpServer)
}

// GetMCPServer returns the underlying mcp-go server for advanced usage
func (s *Server) GetMCPServer() *server.MCPServer {
	return s.mcpServer
}

// GetServerInfo returns server information
func (s *Server) GetServerInfo() (string, string) {
	return s.name, s.version
}
