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 { setupProcessAutomationTools } from './tools.js';
import { convertToolResultToMCP } from '../../core/mcp-adapter.js';

/**
 * Process Automation Module Setup - 12-Factor MCP Implementation
 * 
 * Provides comprehensive workflow automation capabilities
 */
export const processAutomationModule: ModuleSetup = {
  name: 'process-automation',
  version: '1.0.0',
  description: 'Workflow automation with triggers and activities',
  
  async setup(context: ModuleContext): Promise<{ success: boolean; error?: string }> {
    const server = context.server;
    // Register tools with the server
    const toolRegistration = await setupProcessAutomationTools();
    
    // Register tool handler for all process automation 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 setupProcessAutomationTools();
    return registration.tools;
  }
  
  /* metadata: {
    category: 'automation',
    subcategory: 'Workflows',
    complexity: 'advanced',
    dependencies: ['projects'],
    requiredPermissions: ['database:read', 'database:write'],
    configSchema: {
      type: 'object',
      properties: {
        maxConcurrentExecutions: {
          type: 'integer',
          minimum: 1,
          maximum: 100,
          default: 10,
          description: 'Maximum number of concurrent process executions'
        },
        executionTimeout: {
          type: 'integer',
          minimum: 1000,
          maximum: 3600000,
          default: 300000,
          description: 'Default execution timeout in milliseconds'
        },
        retentionDays: {
          type: 'integer',
          minimum: 1,
          maximum: 365,
          default: 30,
          description: 'Number of days to retain execution history'
        },
        enableAiSuggestions: {
          type: 'boolean',
          default: true,
          description: 'Enable AI-powered trigger suggestions'
        }
      }
    }
  } */
};

// Default export for compatibility
export default processAutomationModule;