/**
 * 业务计算工具函数
 */

/**
 * 计算佣金
 * @param amount 交易金额（分）
 * @param rate 佣金比例（0-100）
 * @param type 佣金类型：percentage-百分比, fixed-固定金额
 */
export function calculateCommission(
  amount: number,
  rate: number,
  type: 'percentage' | 'fixed' = 'percentage'
): number {
  if (type === 'fixed') {
    return rate
  }
  return Math.floor((amount * rate) / 100)
}

/**
 * 计算折扣价
 * @param originalPrice 原价（分）
 * @param discount 折扣（0-100）
 */
export function calculateDiscountPrice(originalPrice: number, discount: number): number {
  return Math.floor((originalPrice * discount) / 100)
}

/**
 * 计算流量使用率
 * @param used 已用流量（MB）
 * @param total 总流量（MB）
 */
export function calculateFlowUsageRate(used: number, total: number): number {
  if (total === 0) return 0
  return Math.min(100, Math.round((used / total) * 100))
}

/**
 * 计算剩余天数
 * @param expireTime 过期时间
 */
export function calculateRemainingDays(expireTime: string): number {
  const now = new Date().getTime()
  const expire = new Date(expireTime).getTime()
  const diff = expire - now

  if (diff <= 0) return 0

  return Math.ceil(diff / (1000 * 60 * 60 * 24))
}

/**
 * 计算环比增长率
 * @param current 当前值
 * @param previous 上期值
 */
export function calculateGrowthRate(current: number, previous: number): number {
  if (previous === 0) return current > 0 ? 100 : 0

  return Math.round(((current - previous) / previous) * 100)
}

/**
 * 计算平均值
 * @param values 数值数组
 */
export function calculateAverage(values: number[]): number {
  if (values.length === 0) return 0

  const sum = values.reduce((acc, val) => acc + val, 0)
  return Math.round((sum / values.length) * 100) / 100
}

/**
 * 计算提现手续费
 * @param amount 提现金额（分）
 * @param feeRate 手续费率（0-100）
 * @param feeType 手续费类型：percentage-百分比, fixed-固定
 */
export function calculateWithdrawalFee(
  amount: number,
  feeRate: number,
  feeType: 'percentage' | 'fixed' = 'percentage'
): number {
  if (feeType === 'fixed') {
    return feeRate
  }
  return Math.floor((amount * feeRate) / 100)
}

/**
 * 计算实际到账金额
 * @param amount 提现金额（分）
 * @param fee 手续费（分）
 */
export function calculateActualAmount(amount: number, fee: number): number {
  return Math.max(0, amount - fee)
}

/**
 * 计算分页偏移量
 * @param page 当前页
 * @param pageSize 每页数量
 */
export function calculateOffset(page: number, pageSize: number): number {
  return (page - 1) * pageSize
}

/**
 * 计算总页数
 * @param total 总记录数
 * @param pageSize 每页数量
 */
export function calculateTotalPages(total: number, pageSize: number): number {
  return Math.ceil(total / pageSize)
}
