/**
 * 시장(한국/미국) 판별 + 통화·금액 포매팅 유틸.
 *
 * stocks 모듈 전체가 원래 한국 전용(6자리 코드, 원, 억)이었다. 미국 종목을
 * 함께 다루려면 "이 심볼이 어느 시장인가"를 한 곳에서 결정해야 한다 — 심볼
 * 모양으로 자동 판별하되, Stock.market 이 명시돼 있으면 그걸 우선한다.
 *
 *   - KR: 6자리 숫자 코드 (예: 005930). 통화 원(KRW). 시총 단위 '억'.
 *   - US: 알파벳 티커 (예: AAPL, BRK.B). 통화 $(USD). 시총 native(달러).
 */

export type StockMarket = 'KR' | 'US';

/** 6자리 숫자면 한국, 아니면 미국으로 본다. (.KS/.KQ 접미사가 붙은 한국 심볼도 KR.) */
export function detectMarket(symbol: string): StockMarket {
    const s = (symbol || '').trim().toUpperCase();
    if (/^\d{6}(\.K[QS])?$/.test(s)) return 'KR';
    return 'US';
}

/** Stock.market 이 명시돼 있으면 그대로, 없으면 심볼로 판별. */
export function marketOf(stock: { 심볼: string; market?: StockMarket }): StockMarket {
    return stock.market ?? detectMarket(stock.심볼);
}

export function currencyOf(market: StockMarket): 'KRW' | 'USD' {
    return market === 'US' ? 'USD' : 'KRW';
}

/** 시장에 맞는 통화 표기 — KR='원', US='$'(접두). */
export function formatMoney(n: number | undefined, market: StockMarket): string {
    if (typeof n !== 'number' || !Number.isFinite(n)) return '-';
    if (market === 'US') {
        // 미국 가격은 소수점 둘째 자리까지(주가가 0.xx~수천 달러 범위).
        const v = n >= 1000 ? Math.round(n).toLocaleString() : n.toLocaleString(undefined, { maximumFractionDigits: 2 });
        return `$${v}`;
    }
    return `${Math.round(n).toLocaleString()}원`;
}

/**
 * 시가총액을 사람이 읽는 텍스트로. KR 은 '억/조', US 은 '$xxB/$xxM'.
 *   - capEok: 억 단위(한국 펀더멘털 경로). US 는 capNative(달러)로 호출.
 */
export function formatMarketCapKR(capEok: number | undefined): string {
    if (typeof capEok !== 'number' || !Number.isFinite(capEok) || capEok <= 0) return '-';
    if (capEok >= 10000) {
        const jo = Math.floor(capEok / 10000);
        const rest = Math.round(capEok % 10000);
        return rest > 0 ? `${jo}조 ${rest.toLocaleString()}억` : `${jo}조`;
    }
    return `${Math.round(capEok).toLocaleString()}억`;
}

export function formatMarketCapUS(capUsd: number | undefined): string {
    if (typeof capUsd !== 'number' || !Number.isFinite(capUsd) || capUsd <= 0) return '-';
    if (capUsd >= 1e12) return `$${(capUsd / 1e12).toFixed(2)}T`;
    if (capUsd >= 1e9) return `$${(capUsd / 1e9).toFixed(2)}B`;
    if (capUsd >= 1e6) return `$${(capUsd / 1e6).toFixed(1)}M`;
    return `$${Math.round(capUsd).toLocaleString()}`;
}
