/**
 * 업비트 호가 데이터 타입 정의
 */

/**
 * 호가 단위 (매도/매수 각 1호가)
 */
export interface OrderbookUnit {
  ask_price: number;  // 매도 호가
  bid_price: number;  // 매수 호가
  ask_size: number;   // 매도 잔량
  bid_size: number;   // 매수 잔량
}

/**
 * 업비트 WebSocket 호가 응답
 */
export interface UpbitOrderbookResponse {
  type: string;                    // "orderbook"
  code: string;                    // "KRW-BTC"
  total_ask_size: number;          // 총 매도 잔량
  total_bid_size: number;          // 총 매수 잔량
  orderbook_units: OrderbookUnit[]; // 호가 15개 (매도/매수 각각)
  timestamp: number;                // 타임스탬프
  stream_type?: string;            // SNAPSHOT | REALTIME
}

/**
 * REST API 호가 응답
 */
export interface UpbitOrderbookRestResponse {
  market: string;
  timestamp: number;
  total_ask_size: number;
  total_bid_size: number;
  orderbook_units: OrderbookUnit[];
}

/**
 * 화면 표시용 호가 데이터
 */
export interface OrderbookDisplayUnit {
  price: number;       // 가격
  size: number;        // 잔량
  total: number;       // 누적 잔량
  percentage: number;  // 비율 (0-100)
  type: 'ask' | 'bid'; // 매도/매수 구분
}

/**
 * 호가창 상태
 */
export interface OrderbookState {
  asks: OrderbookDisplayUnit[];  // 매도 호가 (15개)
  bids: OrderbookDisplayUnit[];  // 매수 호가 (15개)
  totalAskSize: number;          // 총 매도 잔량
  totalBidSize: number;          // 총 매수 잔량
  timestamp: number;             // 마지막 업데이트 시간
  connected: boolean;            // WebSocket 연결 상태
}

/**
 * WebSocket 연결 상태
 */
export type WebSocketStatus = 'connecting' | 'connected' | 'disconnected' | 'error';
