export interface SystemStatus {
  trader_id: string;
  trader_name: string;
  ai_model: string;
  is_running: boolean;
  start_time: string;
  runtime_minutes: number;
  call_count: number;
  initial_balance: number;
  scan_interval: string;
  stop_until: string;
  last_reset_time: string;
  ai_provider: string;
}

export interface AccountInfo {
  total_equity: number;
  wallet_balance: number;
  unrealized_profit: number;
  available_balance: number;
  total_pnl: number;
  total_pnl_pct: number;
  total_unrealized_pnl: number;
  initial_balance: number;
  daily_pnl: number;
  position_count: number;
  margin_used: number;
  margin_used_pct: number;
}

export interface Position {
  symbol: string;
  side: string;
  entry_price: number;
  mark_price: number;
  quantity: number;
  leverage: number;
  unrealized_pnl: number;
  unrealized_pnl_pct: number;
  liquidation_price: number;
  margin_used: number;
}

export interface DecisionAction {
  action: string;
  symbol: string;
  quantity: number;
  leverage: number;
  price: number;
  order_id: number;
  timestamp: string;
  success: boolean;
  error?: string;
}

export interface AccountSnapshot {
  total_balance: number;
  available_balance: number;
  total_unrealized_profit: number;
  position_count: number;
  margin_used_pct: number;
}

export interface DecisionRecord {
  timestamp: string;
  cycle_number: number;
  input_prompt: string;
  cot_trace: string;
  decision_json: string;
  account_state: AccountSnapshot;
  positions: any[];
  candidate_coins: string[];
  decisions: DecisionAction[];
  execution_log: string[];
  success: boolean;
  error_message?: string;
}

export interface Statistics {
  total_cycles: number;
  successful_cycles: number;
  failed_cycles: number;
  total_open_positions: number;
  total_close_positions: number;
}

// AI Trading相关类型
export interface TraderInfo {
  trader_id: string;
  trader_name: string;
  ai_model: string;
  exchange_id?: string;
  is_running?: boolean;
  custom_prompt?: string;
}

export interface AIModel {
  id: string;
  name: string;
  provider: string;
  enabled: boolean;
  apiKey?: string;
  customApiUrl?: string;
  customModelName?: string;
}

export interface Exchange {
  id: string;
  name: string;
  type: 'cex' | 'dex';
  enabled: boolean;
  apiKey?: string;
  secretKey?: string;
  testnet?: boolean;
  // Hyperliquid 特定字段
  hyperliquidWalletAddr?: string;
  // Aster 特定字段
  asterUser?: string;
  asterSigner?: string;
  asterPrivateKey?: string;
}

export interface CreateTraderRequest {
  name: string;
  ai_model_id: string;
  exchange_id: string;
  initial_balance: number;
  scan_interval_minutes?: number;
  btc_eth_leverage?: number;
  altcoin_leverage?: number;
  trading_symbols?: string;
  custom_prompt?: string;
  override_base_prompt?: boolean;
  system_prompt_template?: string;
  is_cross_margin?: boolean;
  use_coin_pool?: boolean;
  use_oi_top?: boolean;
}

export interface UpdateModelConfigRequest {
  models: {
    [key: string]: {
      enabled: boolean;
      api_key: string;
      custom_api_url?: string;
      custom_model_name?: string;
    };
  };
}

export interface UpdateExchangeConfigRequest {
  exchanges: {
    [key: string]: {
      enabled: boolean;
      api_key: string;
      secret_key: string;
      testnet?: boolean;
      // Hyperliquid 特定字段
      hyperliquid_wallet_addr?: string;
      // Aster 特定字段
      aster_user?: string;
      aster_signer?: string;
      aster_private_key?: string;
    };
  };
}

// Competition related types
export interface CompetitionTraderData {
  trader_id: string;
  trader_name: string;
  ai_model: string;
  exchange: string;
  total_equity: number;
  total_pnl: number;
  total_pnl_pct: number;
  position_count: number;
  margin_used_pct: number;
  is_running: boolean;
}

export interface CompetitionData {
  traders: CompetitionTraderData[];
  count: number;
}

// Trader Configuration Data for View Modal
export interface TraderConfigData {
  trader_id?: string;
  trader_name: string;
  ai_model: string;
  exchange_id: string;
  btc_eth_leverage: number;
  altcoin_leverage: number;
  trading_symbols: string;
  custom_prompt: string;
  override_base_prompt: boolean;
  is_cross_margin: boolean;
  use_coin_pool: boolean;
  use_oi_top: boolean;
  initial_balance: number;
  scan_interval_minutes: number;
  is_running: boolean;
}
