/** 캔들차트 상단(tv-legend) 항목별 표시 여부 */
export interface ChartLegendVisibility {
  /** 종목 코드 + 방향 점 */
  symbol: boolean;
  /** 타임프레임 (5m, 1D 등) */
  timeframe: boolean;
  /** 업비트 실시간 연결 상태 배지 */
  liveStatus: boolean;
  /** 매매(그리기) 모드 배지 */
  tradingBadge: boolean;
  open: boolean;
  high: boolean;
  low: boolean;
  close: boolean;
  /** 전봉 대비 변동 금액·% */
  change: boolean;
  /** 보조지표 이름 뱃지 */
  indicators: boolean;
  /** 보조지표 현재 값 */
  indicatorValues: boolean;
}

export const DEFAULT_CHART_LEGEND_VISIBILITY: ChartLegendVisibility = {
  symbol: true,
  timeframe: true,
  liveStatus: true,
  tradingBadge: true,
  open: true,
  high: true,
  low: true,
  close: true,
  change: true,
  indicators: true,
  indicatorValues: true,
};

export function resolveChartLegendOptions(
  raw?: Partial<ChartLegendVisibility> | null,
): ChartLegendVisibility {
  if (!raw || typeof raw !== 'object') return { ...DEFAULT_CHART_LEGEND_VISIBILITY };
  const out = { ...DEFAULT_CHART_LEGEND_VISIBILITY };
  for (const key of Object.keys(DEFAULT_CHART_LEGEND_VISIBILITY) as (keyof ChartLegendVisibility)[]) {
    if (typeof raw[key] === 'boolean') out[key] = raw[key]!;
  }
  return out;
}

/** 설정 화면 토글 라벨 */
export const CHART_LEGEND_SETTING_ITEMS: {
  key: keyof ChartLegendVisibility;
  label: string;
  desc: string;
}[] = [
  { key: 'symbol', label: '종목', desc: '차트 상단에 거래 종목 코드를 표시합니다.' },
  { key: 'timeframe', label: '타임프레임', desc: '현재 차트 주기(5m, 1D 등)를 표시합니다.' },
  { key: 'liveStatus', label: '실시간 상태', desc: '업비트 WebSocket 연결 상태(실시간·재연결 등)를 표시합니다.' },
  { key: 'tradingBadge', label: '매매 모드', desc: '매매(그리기) 모드일 때 편집 배지를 표시합니다.' },
  { key: 'open', label: '시가 (O)', desc: '현재(또는 크로스헤어) 봉의 시가를 표시합니다.' },
  { key: 'high', label: '고가 (H)', desc: '현재(또는 크로스헤어) 봉의 고가를 표시합니다.' },
  { key: 'low', label: '저가 (L)', desc: '현재(또는 크로스헤어) 봉의 저가를 표시합니다.' },
  { key: 'close', label: '종가 (C)', desc: '현재(또는 크로스헤어) 봉의 종가를 표시합니다.' },
  { key: 'change', label: '변동', desc: '전봉 대비 변동 금액과 비율을 표시합니다.' },
  { key: 'indicators', label: '보조지표 이름', desc: '차트에 적용된 보조지표 이름 뱃지를 표시합니다.' },
  { key: 'indicatorValues', label: '보조지표 값', desc: '보조지표 이름 옆에 현재 수치를 표시합니다.' },
];
