// 종목 표시용 순수 유틸 (서버·클라이언트 공용 — 'use client'/'use server' 미선언)

export type ChangeDirection = 'up'|'down'|'flat';

// 등락 방향 — 색+부호 병행 원칙 (d6 §5.1 색맹 대응)
export function changeDirection(rate: number|null|undefined): ChangeDirection {
	if (rate === null || rate === undefined || rate === 0) {
		return 'flat';
	}

	return rate > 0 ? 'up' : 'down';
}

export function changeSymbol(direction: ChangeDirection): string {
	switch (direction) {
		case 'up': return '▲';
		case 'down': return '▼';
		default: return '—';
	}
}

// 천 단위 구분 숫자 (null 은 —)
export function formatNumber(value: number|null|undefined): string {
	if (value === null || value === undefined) {
		return '—';
	}

	return value.toLocaleString('ko-KR');
}

// 등락률 % (부호는 changeSymbol 로 병행 표기하므로 절대값)
export function formatChangeRate(rate: number|null|undefined): string {
	if (rate === null || rate === undefined) {
		return '—';
	}

	return `${Math.abs(rate).toFixed(2)}%`;
}

// 원 단위 금액 → 조/억 축약 (시가총액·거래대금)
export function formatKrwCompact(value: number|null|undefined): string {
	if (!value) {
		return '—';
	}

	const eok = value / 100_000_000;

	if (eok >= 10_000) {
		const jo = Math.floor(eok / 10_000);
		const rest = Math.floor(eok % 10_000);
		return rest > 0 ? `${jo.toLocaleString('ko-KR')}조 ${rest.toLocaleString('ko-KR')}억` : `${jo.toLocaleString('ko-KR')}조`;
	}

	if (eok >= 1) {
		return `${Math.floor(eok).toLocaleString('ko-KR')}억`;
	}

	return `${value.toLocaleString('ko-KR')}원`;
}

// 거래 상태 뱃지 라벨 (정상은 뱃지 미표시)
export function tradingStatusLabel(status: string): string {
	switch (status) {
		case 'Halted': return '거래정지';
		case 'Watch': return '관리종목';
		default: return '';
	}
}