/**
 * Module Registry - Track all backend modules and their frontend connections
 *
 * This registry ensures no backend modules get lost during migration.
 * Each module entry defines:
 * - Backend service and endpoints
 * - Frontend pages that use it
 * - Connection status (connected, partial, not connected)
 *
 * Module definitions live in ./module-registry-data.ts
 * This file exports the type, re-exports the data, and provides helper functions.
 */

export interface BackendModule {
  id: string
  name: string
  description: string
  category: 'compliance' | 'ai' | 'infrastructure' | 'education' | 'communication' | 'development'
  backend: {
    service: string  // e.g. 'consent-service', 'python-backend', 'klausur-service'
    port: number
    basePath: string
    endpoints: {
      path: string
      method: string
      description: string
    }[]
  }
  frontend: {
    adminV2Page?: string  // New admin-v2 page path
    oldAdminPage?: string  // Old admin page path (for reference)
    status: 'connected' | 'partial' | 'not-connected' | 'deprecated'
  }
  dependencies?: string[]  // IDs of other modules this depends on
  priority: 'critical' | 'high' | 'medium' | 'low'
  notes?: string
}

// Re-export data from the data file
export { MODULE_REGISTRY } from './module-registry-data'

// Import for use in helper functions
import { MODULE_REGISTRY } from './module-registry-data'

// Helper functions
export function getModulesByCategory(category: BackendModule['category']): BackendModule[] {
  return MODULE_REGISTRY.filter(m => m.category === category)
}

export function getConnectedModules(): BackendModule[] {
  return MODULE_REGISTRY.filter(m => m.frontend.status === 'connected')
}

export function getNotConnectedModules(): BackendModule[] {
  return MODULE_REGISTRY.filter(m => m.frontend.status === 'not-connected')
}

export function getPartialModules(): BackendModule[] {
  return MODULE_REGISTRY.filter(m => m.frontend.status === 'partial')
}

export function getModuleStats() {
  const total = MODULE_REGISTRY.length
  const connected = MODULE_REGISTRY.filter(m => m.frontend.status === 'connected').length
  const partial = MODULE_REGISTRY.filter(m => m.frontend.status === 'partial').length
  const notConnected = MODULE_REGISTRY.filter(m => m.frontend.status === 'not-connected').length
  const deprecated = MODULE_REGISTRY.filter(m => m.frontend.status === 'deprecated').length

  return {
    total,
    connected,
    partial,
    notConnected,
    deprecated,
    percentComplete: Math.round((connected / total) * 100)
  }
}

export function getCategoryStats(category: BackendModule['category']) {
  const modules = getModulesByCategory(category)
  const total = modules.length
  const connected = modules.filter(m => m.frontend.status === 'connected').length
  const partial = modules.filter(m => m.frontend.status === 'partial').length
  const notConnected = modules.filter(m => m.frontend.status === 'not-connected').length

  return {
    total,
    connected,
    partial,
    notConnected,
    percentComplete: total > 0 ? Math.round((connected / total) * 100) : 0
  }
}
