// 风险与监控模块的类型定义

/**
 * 风险指标
 */
export interface RiskMetrics {
  symbol: string
  timestamp: number

  // 基础风险指标
  var: number // 价值-at-风险
  cvar: number // 条件价值-at-风险
  maxDrawdown: number // 最大回撤
  sharpeRatio: number // 夏普比率
  volatility: number // 波动率

  // 持仓风险
  leverageRatio: number // 杠杆比率
  liquidationRisk: number // 强平风险
  concentrationRisk: number // 集中度风险

  // 流动性风险
  slippageRisk: number // 滑点风险
  liquidityRisk: number // 流动性风险
  fundingRateRisk: number // 资金费率风险

  // 市场风险
  correlationRisk: number // 相关性风险
  marketImpact: number // 市场冲击
}

/**
 * 持仓风险评估
 */
export interface PositionRisk {
  positionId: string
  symbol: string
  side: 'long' | 'short'

  // 风险值
  delta: number // Delta
  gamma: number // Gamma
  theta: number // Theta
  vega: number // Vega
  rho: number // Rho

  // 风险指标
  var: number // 价值-at-风险
  cvar: number // 条件价值-at-风险
  liquidationPrice: number // 强平价格
  marginRatio: number // 保证金比率
  unrealizedPnL: number // 未实现盈亏

  // 压力测试
  stressTestResults: {
    scenario: string
    pnl: number
    liquidationPrice: number
  }[]
}

/**
 * 投资组合风险
 */
export interface PortfolioRisk {
  totalValue: number
  totalUnrealizedPnL: number
  totalRealizedPnL: number

  // 整体风险指标
  portfolioVaR: number
  portfolioCVaR: number
  maxDrawdown: number
  sharpeRatio: number
  volatility: number

  // 风险分解
  marketRisk: number
  creditRisk: number
  liquidityRisk: number
  operationalRisk: number

  // 相关性矩阵
  correlationMatrix: Record<string, Record<string, number>>

  // 风险贡献度
  riskContributions: Record<string, number> // symbol -> risk contribution

  timestamp: number
}

/**
 * 警报配置
 */
export interface AlertConfig {
  id: string
  name: string
  symbol?: string // 特定交易对（可选）
  type: 'price' | 'volume' | 'risk' | 'position' | 'system'

  // 触发条件
  conditions: {
    metric: string // 监控指标
    operator: '>' | '<' | '>=' | '<=' | '==' | '!='
    threshold: number // 阈值
    window?: number // 时间窗口（秒）
  }[]

  // 警报设置
  severity: 'low' | 'medium' | 'high' | 'critical'
  cooldown: number // 冷却时间（秒）
  enabled: boolean

  // 通知渠道
  channels: {
    telegram?: boolean
    email?: boolean
    slack?: boolean
    webhook?: string
  }

  // 自动响应
  autoActions?: {
    type: 'stop_loss' | 'take_profit' | 'reduce_position' | 'close_position'
    params: Record<string, any>
  }[]
}

/**
 * 警报事件
 */
export interface AlertEvent {
  id: string
  configId: string
  symbol: string
  type: string
  severity: 'low' | 'medium' | 'high' | 'critical'
  title: string
  message: string
  value: number // 当前值
  threshold: number // 阈值
  timestamp: number
  resolved?: boolean
  resolvedAt?: number

  // 相关数据
  context?: Record<string, any>
}

/**
 * 风险阈值配置
 */
export interface RiskThresholds {
  // 持仓风险阈值
  maxLeverage: number // 最大杠杆
  maxPositionSize: number // 最大仓位大小
  maxDrawdown: number // 最大回撤
  minMarginRatio: number // 最小保证金比率

  // 流动性风险阈值
  maxSlippage: number // 最大滑点
  minLiquidity: number // 最小流动性
  maxGasPrice: number // 最大gas价格

  // 市场风险阈值
  maxVolatility: number // 最大波动率
  maxConcentration: number // 最大集中度

  // 系统风险阈值
  maxLatency: number // 最大延迟
  minUptime: number // 最小运行时间
}

/**
 * 压力测试场景
 */
export interface StressTestScenario {
  id: string
  name: string
  description: string

  // 市场冲击
  priceShocks: Record<string, number> // symbol -> price change %
  volatilityShocks: Record<string, number> // symbol -> volatility multiplier

  // 流动性冲击
  liquidityShocks: Record<string, number> // symbol -> liquidity reduction %

  // 资金费率冲击
  fundingRateShocks: Record<string, number> // symbol -> funding rate change

  // 持续时间
  duration: number // 场景持续时间（秒）
  probability: number // 发生概率
}

/**
 * 压力测试结果
 */
export interface StressTestResult {
  scenarioId: string
  symbol: string
  timestamp: number

  // 结果指标
  portfolioValue: number
  unrealizedPnL: number
  realizedPnL: number
  marginRatio: number
  liquidationRisk: number

  // 风险指标
  var: number
  cvar: number
  maxDrawdown: number

  // 持仓变化
  positionChanges: Record<
    string,
    {
      size: number
      unrealizedPnL: number
      liquidationPrice: number
    }
  >

  // 是否触发强平
  liquidations: string[] // 被强平的持仓ID列表
}

/**
 * 风险报告
 */
export interface RiskReport {
  id: string
  timestamp: number
  period: {
    start: number
    end: number
  }

  // 总体风险概览
  overview: {
    totalValue: number
    totalPnL: number
    sharpeRatio: number
    maxDrawdown: number
    winRate: number
  }

  // 风险分解
  riskBreakdown: {
    marketRisk: number
    creditRisk: number
    liquidityRisk: number
    operationalRisk: number
  }

  // 持仓风险详情
  positionRisks: Record<string, PositionRisk>

  // 警报统计
  alertStats: {
    total: number
    bySeverity: Record<string, number>
    byType: Record<string, number>
  }

  // 建议
  recommendations: string[]
}
