import { getKoreanName } from './marketNameCache'; /** 백엔드/캐시에 마켓 코드가 한글명으로 들어온 경우 보정 */ export function isInvalidStoredKoreanName(market: string, name?: string | null): boolean { if (!name || !name.trim()) return true; const trimmed = name.trim(); if (trimmed === market) return true; if (trimmed.startsWith('KRW-')) return true; const sym = market.replace(/^KRW-/, ''); if (trimmed === sym) return true; return false; } /** 투자대상 표시·저장용 한글명·영문 심볼 */ export function resolveVirtualTargetNames( market: string, koreanName?: string | null, englishName?: string | null, ): { koreanName: string; englishName: string } { const en = (englishName?.trim() || market.replace(/^KRW-/, '')).replace(/^KRW-/, ''); const ko = !isInvalidStoredKoreanName(market, koreanName) ? koreanName!.trim() : getKoreanName(market); return { koreanName: ko, englishName: en }; } /** 투자대상·차트 종목 선택 — 한글명(영문명) */ export function formatVirtualTargetOptionLabel( market: string, koreanName?: string | null, englishName?: string | null, ): string { const { koreanName: ko, englishName: en } = resolveVirtualTargetNames(market, koreanName, englishName); return `${ko}(${en})`; } /** 카드·차트 상단 — 투자전략 표시명 */ export function resolveVirtualTargetStrategyDisplayName( strategy: { name?: string } | undefined, strategies: Array<{ id?: number; name?: string }>, readOnlyStrategyLabel?: string, ): string { const ro = readOnlyStrategyLabel?.trim(); if (ro) return ro; if (strategy?.name?.trim()) return strategy.name.trim(); return '전략 미지정'; }