import { Position } from '../../types/core'

export type HedgeMethod = 'spot' | 'perp'

export interface HedgeThresholds {
  maxSlippage: number // 允许最大滑点比例，如 0.005 = 0.5%
  deltaDeviationPct: number // 允许的 delta 偏差百分比阈值
  minFundingRate: number // 触发费率对冲的最小资金费率（绝对值）
  minNotionalUSD: number // 执行最小名义金额（美元）
}

export interface FundingContext {
  fundingRate: number // 当前资金费率（每8小时或每小时，统一成年化/周期化在调用处处理）
  nextFundingTime?: number
}

export interface PriceContext {
  perpPrice: number // Perp 市场价格（USD）
  hedgePrice: number // 对冲工具价格（USD）
  correlation: number // 相关系数（0-1）
}

export interface HedgeConfig {
  preferredMethod: HedgeMethod // 首选对冲方式
  thresholds: HedgeThresholds // 阈值控制
}

export interface HedgeDecision {
  shouldHedge: boolean
  method: HedgeMethod
  hedgeQuantity: number // 对冲工具的数量（按 hedgePrice 标的）
  reason: string
  expectedFundingPnlPerPeriod?: number // 预计单周期资金费收益（USD）
}

export interface RouterQuote {
  method: HedgeMethod
  expectedIn?: number // 预期输入数量
  expectedOut?: number // 预期输出数量
  price: number // 用于滑点检查的价格
  gasEstimateUSD?: number // 预估 gas 成本（USD）
  slippage: number // 实际滑点
  route?: string // 路由信息（演示）
}

export interface ExecutionPlan {
  method: HedgeMethod
  symbol: string
  quantity: number // 对冲标的数量
  side: 'buy' | 'sell' // 对冲方向
  quote: RouterQuote
}

export interface ExecutionResult {
  success: boolean
  txHash?: string
  orderId?: string | number
  executedQuantity?: number
  executedPrice?: number
  error?: string
}

export interface HedgeRequest {
  symbol: string // 如 BTCUSDT（perp 对）
  perpPosition: Position // 当前 perp 仓位
  prices: PriceContext // 价格上下文
  funding: FundingContext // 资金费率上下文
  config: HedgeConfig // 对冲配置
}
