/** * 어구 정체성 충돌(GEAR_IDENTITY_COLLISION) 운영자 분류 상태 카탈로그 * * SSOT: backend GearIdentityCollision.status 컬럼 (V030 마이그레이션) * 사용처: GearCollisionDetection 페이지 필터/테이블 Badge */ import type { BadgeIntent } from '@lib/theme/variants'; export type GearCollisionStatus = | 'OPEN' // 신규 탐지 (미검토) | 'REVIEWED' // 검토됨 (확정 보류) | 'CONFIRMED_ILLEGAL' // 불법 확정 | 'FALSE_POSITIVE'; // 오탐 처리 export interface GearCollisionStatusMeta { code: GearCollisionStatus; i18nKey: string; fallback: { ko: string; en: string }; intent: BadgeIntent; } export const GEAR_COLLISION_STATUSES: Record = { OPEN: { code: 'OPEN', i18nKey: 'gearCollision.status.open', fallback: { ko: '미검토', en: 'Open' }, intent: 'warning', }, REVIEWED: { code: 'REVIEWED', i18nKey: 'gearCollision.status.reviewed', fallback: { ko: '검토됨', en: 'Reviewed' }, intent: 'info', }, CONFIRMED_ILLEGAL: { code: 'CONFIRMED_ILLEGAL', i18nKey: 'gearCollision.status.confirmedIllegal', fallback: { ko: '불법 확정', en: 'Confirmed Illegal' }, intent: 'critical', }, FALSE_POSITIVE: { code: 'FALSE_POSITIVE', i18nKey: 'gearCollision.status.falsePositive', fallback: { ko: '오탐', en: 'False Positive' }, intent: 'muted', }, }; export function getGearCollisionStatusMeta(s: string): GearCollisionStatusMeta | undefined { return GEAR_COLLISION_STATUSES[s as GearCollisionStatus]; } export function getGearCollisionStatusIntent(s: string): BadgeIntent { return getGearCollisionStatusMeta(s)?.intent ?? 'muted'; } export function getGearCollisionStatusLabel( s: string, t: (key: string, opts?: Record) => string, lang: 'ko' | 'en' = 'ko', ): string { const meta = getGearCollisionStatusMeta(s); if (!meta) return s; const translated = t(meta.i18nKey, { defaultValue: '' }); return translated || meta.fallback[lang]; } export const GEAR_COLLISION_STATUS_ORDER: GearCollisionStatus[] = [ 'OPEN', 'REVIEWED', 'CONFIRMED_ILLEGAL', 'FALSE_POSITIVE', ];