/**
 * 업비트 웹 거래소 심볼 딥링크 (차트·호가 탭이 있는 티커 화면)
 * @see https://upbit.com — code 파라미터는 CRIX.UPBIT.KRW-XXX 형식
 *
 * 시간봉: 업비트 차트 history 요청과 동일하게 `resolution` 쿼리로 전달합니다.
 * (예: 30분봉 → resolution=30, 1시간봉 → resolution=60, 4시간 → 240, 일봉 → 1D)
 */

/**
 * 알림/스케줄 timeInterval → 업비트 차트 `resolution` (네트워크 payload와 동일 규칙)
 */
export function mapAlertTimeIntervalToTradingViewResolution(
  timeInterval: string | undefined | null
): string | undefined {
  if (!timeInterval?.trim()) return undefined;
  const raw = timeInterval.trim();
  // 월봉: 숫자+대문자 M만 (1m 분봉과 구분)
  if (/^\d+M$/.test(raw)) {
    const monthMap: Record<string, string> = {
      '1M': '1M',
      '3M': '3M',
      '6M': '6M',
      '12M': '12M',
    };
    return monthMap[raw];
  }
  const key = raw.toLowerCase();
  const map: Record<string, string> = {
    '1m': '1',
    '3m': '3',
    '5m': '5',
    '10m': '10',
    '15m': '15',
    '30m': '30',
    '60m': '60',
    '1h': '60',
    '4h': '240',
    '240m': '240',
    '1d': '1D',
    '1w': '1W',
  };
  return map[key];
}

export function getUpbitWebExchangeUrl(
  market: string | undefined | null,
  timeInterval?: string | undefined | null
): string | null {
  if (!market?.trim()) return null;
  let m = market.trim().toUpperCase();
  if (m.startsWith('CRIX.UPBIT.')) {
    m = m.slice('CRIX.UPBIT.'.length);
  }
  if (!/^(KRW|USDT|BTC)-[A-Z0-9]+$/i.test(m)) {
    return null;
  }
  const code = `CRIX.UPBIT.${m}`;
  const base = `https://www.upbit.com/exchange?code=${encodeURIComponent(code)}`;
  const res = mapAlertTimeIntervalToTradingViewResolution(timeInterval);
  if (res) {
    return `${base}&resolution=${encodeURIComponent(res)}`;
  }
  return base;
}
