import type { VirtualTargetItem } from './virtualTradingStorage'; /** 종목 전략 셀렉트 — 기본(전역) 전략 옵션 값 */ export const VIRTUAL_DEFAULT_STRATEGY_VALUE = '__default__'; /** 종목에 전략이 지정되지 않았으면 전역(기본) 전략 ID */ export function resolveVirtualTargetStrategyId( target: Pick, globalStrategyId: number | null, ): number | null { if (target.strategyId != null) return target.strategyId; return globalStrategyId; } export function usesDefaultStrategy(target: Pick): boolean { return target.strategyId == null; } export function targetStrategySelectValue(target: Pick): string { return target.strategyId != null ? String(target.strategyId) : VIRTUAL_DEFAULT_STRATEGY_VALUE; } export function parseTargetStrategySelectValue(value: string): number | null { if (!value || value === VIRTUAL_DEFAULT_STRATEGY_VALUE) return null; const n = Number(value); return Number.isFinite(n) ? n : null; } export function defaultStrategyOptionLabel( globalStrategyId: number | null, strategies: Array<{ id?: number; name?: string }>, ): string { if (globalStrategyId == null) return '기본 전략 (미설정)'; const name = strategies.find(s => s.id === globalStrategyId)?.name; return name ? `기본 전략 (${name})` : '기본 전략'; } /** * 예전에 전역 전략 ID가 종목에 복사 저장된 항목 → null(기본 전략 따름)로 정규화 */ export function coalesceTargetsToDefaultStrategy( targets: VirtualTargetItem[], globalStrategyId: number | null, ): VirtualTargetItem[] { if (globalStrategyId == null) return targets; let changed = false; const next = targets.map(t => { if (t.strategyId != null && t.strategyId === globalStrategyId) { changed = true; return { ...t, strategyId: null }; } return t; }); return changed ? next : targets; }