/**
 * 분류 카탈로그 중앙 레지스트리 (Single Source of Truth)
 *
 * 디자인 쇼케이스의 카탈로그 섹션과 실제 프론트가 **모두 이 레지스트리를 참조**한다.
 * 따라서:
 *  - 특정 분류의 라벨을 바꾸면 (예: '심각' → '매우 심각') 쇼케이스 + 실 페이지 동시 반영
 *  - 특정 분류의 intent/색상을 바꾸면 역시 자동 반영
 *  - 새 카탈로그를 추가하면 쇼케이스에 자동 노출 (등록만 하면 됨)
 *
 * 각 카탈로그는 `items: Record<Code, Meta>` 형태를 가진다 (Meta는 개별 파일의 타입 사용).
 * 쇼케이스는 heterogeneous 타입을 허용하므로 CatalogEntry의 items는 Record<string, AnyMeta> 로 처리.
 */

import { ALERT_LEVELS } from './alertLevels';
import { VIOLATION_TYPES } from './violationTypes';
import { EVENT_STATUSES } from './eventStatuses';
import { ENFORCEMENT_ACTIONS } from './enforcementActions';
import { ENFORCEMENT_RESULTS } from './enforcementResults';
import { PATROL_STATUSES } from './patrolStatuses';
import { ENGINE_SEVERITIES } from './engineSeverities';
import { DEVICE_STATUSES } from './deviceStatuses';
import {
  PARENT_RESOLUTION_STATUSES,
  LABEL_SESSION_STATUSES,
} from './parentResolutionStatuses';
import {
  MODEL_STATUSES,
  QUALITY_GATE_STATUSES,
  EXPERIMENT_STATUSES,
} from './modelDeploymentStatuses';
import { GEAR_GROUP_TYPES } from './gearGroupTypes';
import { DARK_VESSEL_PATTERNS } from './darkVesselPatterns';
import { USER_ACCOUNT_STATUSES } from './userAccountStatuses';
import { LOGIN_RESULTS } from './loginResultStatuses';
import { PERMIT_STATUSES, GEAR_JUDGMENTS } from './permissionStatuses';
import {
  VESSEL_SURVEILLANCE_STATUSES,
  VESSEL_RISK_RINGS,
} from './vesselAnalysisStatuses';
import { CONNECTION_STATUSES } from './connectionStatuses';
import { TRAINING_ZONE_TYPES } from './trainingZoneTypes';
import { MLOPS_JOB_STATUSES } from './mlopsJobStatuses';
import { THREAT_LEVELS, AGENT_PERM_TYPES, AGENT_EXEC_RESULTS } from './aiSecurityStatuses';
import { ZONE_CODES } from './zoneCodes';
import { GEAR_VIOLATION_CODES } from './gearViolationCodes';

/**
 * 카탈로그 공통 메타 — 쇼케이스 렌더와 UI 일관성을 위한 최소 스키마
 */
export interface CatalogEntry {
  /** 안정적 ID (쇼케이스 추적 ID의 슬러그 부분) */
  id: string;
  /** 쇼케이스 추적 ID (TRK-CAT-*) */
  showcaseId: string;
  /** 쇼케이스 섹션 제목 (한글) */
  titleKo: string;
  /** 쇼케이스 섹션 제목 (영문) */
  titleEn: string;
  /** 1줄 설명 */
  description: string;
  /** 출처 (백엔드 enum / code_master 등) */
  source?: string;
  /** 카탈로그 데이터 — items의 각 meta는 { code, fallback?, intent?, classes?, ... } 구조 */
  items: Record<string, unknown>;
}

/**
 * 전체 카탈로그 레지스트리
 *
 * ⚠️ 새 카탈로그 추가 시:
 *   1. shared/constants/에 파일 생성 (items record + 헬퍼 함수)
 *   2. 이 레지스트리에 CatalogEntry 추가
 *   3. 쇼케이스에 자동 노출 + 실 페이지에서 헬퍼 함수로 참조
 */
export const CATALOG_REGISTRY: CatalogEntry[] = [
  {
    id: 'alert-level',
    showcaseId: 'TRK-CAT-alert-level',
    titleKo: '위험도',
    titleEn: 'Alert Level',
    description: 'CRITICAL / HIGH / MEDIUM / LOW — 모든 이벤트/알림 배지',
    source: 'backend code_master EVENT_LEVEL',
    items: ALERT_LEVELS,
  },
  {
    id: 'violation-type',
    showcaseId: 'TRK-CAT-violation-type',
    titleKo: '위반 유형',
    titleEn: 'Violation Type',
    description: '중국불법조업 / 환적의심 / EEZ침범 등',
    source: 'backend ViolationType enum',
    items: VIOLATION_TYPES,
  },
  {
    id: 'event-status',
    showcaseId: 'TRK-CAT-event-status',
    titleKo: '이벤트 상태',
    titleEn: 'Event Status',
    description: 'NEW / ACK / IN_PROGRESS / RESOLVED / FALSE_POSITIVE',
    source: 'backend code_master EVENT_STATUS',
    items: EVENT_STATUSES,
  },
  {
    id: 'enforcement-action',
    showcaseId: 'TRK-CAT-enforcement-action',
    titleKo: '단속 조치',
    titleEn: 'Enforcement Action',
    description: 'CAPTURE / INSPECT / WARN / DISPERSE / TRACK / EVIDENCE',
    source: 'backend code_master ENFORCEMENT_ACTION',
    items: ENFORCEMENT_ACTIONS,
  },
  {
    id: 'enforcement-result',
    showcaseId: 'TRK-CAT-enforcement-result',
    titleKo: '단속 결과',
    titleEn: 'Enforcement Result',
    description: 'PUNISHED / REFERRED / WARNED / RELEASED / FALSE_POSITIVE',
    source: 'backend code_master ENFORCEMENT_RESULT',
    items: ENFORCEMENT_RESULTS,
  },
  {
    id: 'patrol-status',
    showcaseId: 'TRK-CAT-patrol-status',
    titleKo: '함정 상태',
    titleEn: 'Patrol Status',
    description: '출동 / 순찰 / 복귀 / 정박 / 정비 / 대기',
    source: 'backend code_master PATROL_STATUS',
    items: PATROL_STATUSES,
  },
  {
    id: 'engine-severity',
    showcaseId: 'TRK-CAT-engine-severity',
    titleKo: '엔진 심각도',
    titleEn: 'Engine Severity',
    description: 'AI 모델/분석엔진 오류 심각도',
    items: ENGINE_SEVERITIES,
  },
  {
    id: 'device-status',
    showcaseId: 'TRK-CAT-device-status',
    titleKo: '함정 Agent 장치 상태',
    titleEn: 'Device Status',
    description: 'ONLINE / OFFLINE / SYNCING / NOT_DEPLOYED',
    items: DEVICE_STATUSES,
  },
  {
    id: 'parent-resolution',
    showcaseId: 'TRK-CAT-parent-resolution',
    titleKo: '모선 확정 상태',
    titleEn: 'Parent Resolution Status',
    description: 'PENDING / CONFIRMED / REJECTED / REVIEWING',
    items: PARENT_RESOLUTION_STATUSES,
  },
  {
    id: 'label-session',
    showcaseId: 'TRK-CAT-label-session',
    titleKo: '라벨 세션',
    titleEn: 'Label Session Status',
    description: '모선 학습 세션 상태',
    items: LABEL_SESSION_STATUSES,
  },
  {
    id: 'model-status',
    showcaseId: 'TRK-CAT-model-status',
    titleKo: 'AI 모델 상태',
    titleEn: 'Model Status',
    description: 'DEV / STAGING / CANARY / PROD / ARCHIVED',
    items: MODEL_STATUSES,
  },
  {
    id: 'quality-gate',
    showcaseId: 'TRK-CAT-quality-gate',
    titleKo: '품질 게이트',
    titleEn: 'Quality Gate Status',
    description: '모델 배포 전 품질 검증',
    items: QUALITY_GATE_STATUSES,
  },
  {
    id: 'experiment',
    showcaseId: 'TRK-CAT-experiment',
    titleKo: 'ML 실험',
    titleEn: 'Experiment Status',
    description: 'MLOps 실험 상태',
    items: EXPERIMENT_STATUSES,
  },
  {
    id: 'gear-group',
    showcaseId: 'TRK-CAT-gear-group',
    titleKo: '어구 그룹 유형',
    titleEn: 'Gear Group Type',
    description: 'FLEET / GEAR_IN_ZONE / GEAR_OUT_ZONE',
    items: GEAR_GROUP_TYPES,
  },
  {
    id: 'dark-vessel',
    showcaseId: 'TRK-CAT-dark-vessel',
    titleKo: '다크베셀 패턴',
    titleEn: 'Dark Vessel Pattern',
    description: 'AIS 끊김/스푸핑 패턴 5종',
    items: DARK_VESSEL_PATTERNS,
  },
  {
    id: 'user-account',
    showcaseId: 'TRK-CAT-user-account',
    titleKo: '사용자 계정 상태',
    titleEn: 'User Account Status',
    description: 'ACTIVE / LOCKED / INACTIVE / PENDING',
    items: USER_ACCOUNT_STATUSES,
  },
  {
    id: 'login-result',
    showcaseId: 'TRK-CAT-login-result',
    titleKo: '로그인 결과',
    titleEn: 'Login Result',
    description: 'SUCCESS / FAILED / LOCKED',
    items: LOGIN_RESULTS,
  },
  {
    id: 'permit-status',
    showcaseId: 'TRK-CAT-permit-status',
    titleKo: '허가 상태',
    titleEn: 'Permit Status',
    description: '선박 허가 유효 / 만료 / 정지',
    items: PERMIT_STATUSES,
  },
  {
    id: 'gear-judgment',
    showcaseId: 'TRK-CAT-gear-judgment',
    titleKo: '어구 판정',
    titleEn: 'Gear Judgment',
    description: '합법 / 의심 / 불법',
    items: GEAR_JUDGMENTS,
  },
  {
    id: 'vessel-surveillance',
    showcaseId: 'TRK-CAT-vessel-surveillance',
    titleKo: '선박 감시 상태',
    titleEn: 'Vessel Surveillance Status',
    description: '관심선박 추적 상태',
    items: VESSEL_SURVEILLANCE_STATUSES,
  },
  {
    id: 'vessel-risk-ring',
    showcaseId: 'TRK-CAT-vessel-risk-ring',
    titleKo: '선박 위험 링',
    titleEn: 'Vessel Risk Ring',
    description: '지도 마커 위험도 링',
    items: VESSEL_RISK_RINGS,
  },
  {
    id: 'connection',
    showcaseId: 'TRK-CAT-connection',
    titleKo: '연결 상태',
    titleEn: 'Connection Status',
    description: 'OK / WARNING / ERROR',
    items: CONNECTION_STATUSES,
  },
  {
    id: 'training-zone',
    showcaseId: 'TRK-CAT-training-zone',
    titleKo: '훈련 수역',
    titleEn: 'Training Zone Type',
    description: 'NAVY / AIRFORCE / ARMY / ADD / KCG',
    items: TRAINING_ZONE_TYPES,
  },
  {
    id: 'mlops-job-status',
    showcaseId: 'TRK-CAT-mlops-job-status',
    titleKo: 'MLOps Job 상태',
    titleEn: 'MLOps Job Status',
    description: 'running / done / fail / pending',
    source: 'LGCNS MLOps 파이프라인',
    items: MLOPS_JOB_STATUSES,
  },
  {
    id: 'threat-level',
    showcaseId: 'TRK-CAT-threat-level',
    titleKo: 'AI 위협 수준',
    titleEn: 'AI Threat Level',
    description: 'HIGH / MEDIUM / LOW',
    source: 'AI 보안 (SER-10)',
    items: THREAT_LEVELS,
  },
  {
    id: 'agent-perm-type',
    showcaseId: 'TRK-CAT-agent-perm-type',
    titleKo: 'Agent 권한 유형',
    titleEn: 'Agent Permission Type',
    description: 'ADMIN / DELETE / WRITE / READ / EXECUTE',
    source: 'AI Agent 보안 (SER-11)',
    items: AGENT_PERM_TYPES,
  },
  {
    id: 'agent-exec-result',
    showcaseId: 'TRK-CAT-agent-exec-result',
    titleKo: 'Agent 실행 결과',
    titleEn: 'Agent Execution Result',
    description: 'BLOCKED / CONDITIONAL / ALLOWED',
    source: 'AI Agent 보안 (SER-11)',
    items: AGENT_EXEC_RESULTS,
  },
  {
    id: 'zone-code',
    showcaseId: 'TRK-CAT-zone-code',
    titleKo: '수역 코드',
    titleEn: 'Zone Codes',
    description: '특정해역 I~IV / 영해 / 접속수역 / EEZ 외',
    source: 'prediction/algorithms/location.py classify_zone()',
    items: ZONE_CODES,
  },
  {
    id: 'gear-violation',
    showcaseId: 'TRK-CAT-gear-violation',
    titleKo: '어구 위반 G코드',
    titleEn: 'Gear Violation G-Codes',
    description: 'G-01~G-06 어구 위반 유형 (DAR-03)',
    source: 'prediction/algorithms/gear_violation.py',
    items: GEAR_VIOLATION_CODES,
  },
];

/** ID로 특정 카탈로그 조회 */
export function getCatalogById(id: string): CatalogEntry | undefined {
  return CATALOG_REGISTRY.find((c) => c.id === id);
}
