/**
 * 모듈 레지스트리
 *
 * Phase 1: 정적 매니페스트 (여기서 직접 정의)
 * Phase 2: 백엔드 API에서 로딩으로 교체
 */

import type { ModuleManifest, ModuleId } from './types';

const MODULE_REGISTRY: Record<ModuleId, ModuleManifest> = {
  common: {
    id: 'common',
    name: '공통 ERP',
    description: '모든 테넌트가 사용하는 기본 모듈',
    routePrefixes: [
      '/dashboard', '/accounting', '/sales', '/hr', '/approval',
      '/board', '/boards', '/customer-center', '/settings',
      '/master-data', '/material', '/outbound', '/reports',
      '/company-info', '/subscription', '/payment-history',
    ],
  },
  production: {
    id: 'production',
    name: '생산관리',
    description: '셔터 MES 생산/작업지시 관리',
    routePrefixes: ['/production'],
    dashboardSections: ['dailyProduction', 'unshipped'],
  },
  quality: {
    id: 'quality',
    name: '품질관리',
    description: '설비/검사/수리 관리',
    routePrefixes: ['/quality'],
  },
  construction: {
    id: 'construction',
    name: '건설관리',
    description: '건설 프로젝트/계약/기성 관리',
    routePrefixes: ['/construction'],
    dashboardSections: ['construction'],
  },
  'vehicle-management': {
    id: 'vehicle-management',
    name: '차량관리',
    description: '차량/지게차 관리',
    routePrefixes: ['/vehicle-management', '/vehicle'],
  },
};

/** 특정 경로가 어떤 모듈에 속하는지 반환 */
export function getModuleForRoute(pathname: string): ModuleId {
  for (const [moduleId, manifest] of Object.entries(MODULE_REGISTRY)) {
    if (moduleId === 'common') continue;
    for (const prefix of manifest.routePrefixes) {
      if (pathname === prefix || pathname.startsWith(prefix + '/')) {
        return moduleId as ModuleId;
      }
    }
  }
  return 'common';
}

/** 활성 모듈들의 대시보드 섹션 키 목록 반환 */
export function getEnabledDashboardSections(enabledModules: ModuleId[]): string[] {
  const sections: string[] = [];
  for (const moduleId of enabledModules) {
    const manifest = MODULE_REGISTRY[moduleId];
    if (manifest?.dashboardSections) {
      sections.push(...manifest.dashboardSections);
    }
  }
  return sections;
}
