import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js';
import { ModuleSetup, ModuleContext } from '../../core/types.js';
// import { ToolCategory } from '../../core/types.js';
import { setupIssueTrackingTools } from './tools.js';
import { convertToolResultToMCP } from '../../core/mcp-adapter.js';

/**
 * Issue Tracking Module Setup - 12-Factor MCP Implementation
 * 
 * Provides comprehensive issue tracking capabilities
 */
export const issueTrackingModule: ModuleSetup = {
  name: 'issue-tracking',
  version: '1.0.0',
  description: 'Track bugs, features, and enhancements',
  
  async setup(context: ModuleContext): Promise<{ success: boolean; error?: string }> {
    const server = context.server;
    // Register tools with the server
    const toolRegistration = await setupIssueTrackingTools();
    
    // Register tool handler for all issue tracking tools
    server.setRequestHandler(CallToolRequestSchema, async (request) => {
      const { name } = request.params;
      
      // Find the matching tool
      const tool = toolRegistration.tools.find(t => t.name === name);
      if (!tool) {
        return null; // Let other handlers process this
      }
      
      // Create request context
      const context = {
        toolName: name,
        requestId: `req-${Date.now()}`,
        projectId: 'default',
        userId: 'system',
        timestamp: Date.now(),
        db: null as any
      };
      
      // Execute the tool and convert result to MCP format
      const result = await tool.execute(request.params.arguments || {}, context);
      return convertToolResultToMCP(result, name);
    });
    
    return { success: true };
  },
  
  async getTools() {
    const registration = await setupIssueTrackingTools();
    return registration.tools;
  }
  
  /* metadata: {
    category: 'project-management',
    subcategory: 'Issue Tracking',
    complexity: 'intermediate',
    dependencies: ['projects'],
    requiredPermissions: ['database:read', 'database:write'],
    configSchema: {
      type: 'object',
      properties: {
        defaultPriority: {
          type: 'string',
          enum: ['critical', 'high', 'medium', 'low'],
          default: 'medium',
          description: 'Default priority for new issues'
        },
        allowAnonymousIssues: {
          type: 'boolean',
          default: false,
          description: 'Allow creating issues without authentication'
        },
        requireLabels: {
          type: 'boolean',
          default: false,
          description: 'Require at least one label on issues'
        },
        autoAssignToCreator: {
          type: 'boolean',
          default: false,
          description: 'Automatically assign issues to their creator'
        },
        issueNumberPrefix: {
          type: 'string',
          default: 'ISSUE',
          description: 'Prefix for issue IDs'
        }
      }
    }
  } */
};

// Default export for compatibility
export default issueTrackingModule;