import { request, type ApiResponse } from '@/utils/request'

// ==================== 统计类型定义 ====================

/**
 * 今日订单统计响应接口
 */
export interface TodayOrderStats {
  /** 发起订单数（今日创建的订单总数） */
  initiateOrderCount: number
  /** 支付订单数（今日支付成功的订单数） */
  paidOrderCount: number
  /** 消费人数（今日有消费的用户数） */
  userCount: number
  /** 订单总金额（今日订单折后总金额） */
  orderZheTotal: number
  /** 出货总金额（今日出货奖品总价值） */
  goodsTotalAmount: number
  /** 优惠券抵扣（今日优惠券抵扣总额） */
  useCoupon: number
  /** RMB支付（今日微信支付总额） */
  price: number
  /** 钻石支付（今日钻石支付总额） */
  useMoney: number
  /** UU币支付（今日UU币支付总额） */
  useIntegral: number
  /** 达达券支付（今日达达券支付总额） */
  useMoney2: number
}

/**
 * 货币信息统计响应接口
 */
export interface CurrencyInfoStats {
  /** 今日发放钻石 */
  todayAddMoney: number
  /** 今日消费钻石 */
  todayUseMoney: number
  /** 昨日发放钻石 */
  yesterdayAddMoney: number
  /** 昨日消费钻石 */
  yesterdayUseMoney: number
  /** 今日发放UU币 */
  todayAddIntegral: number
  /** 今日消费UU币 */
  todayUseIntegral: number
  /** 昨日发放UU币 */
  yesterdayAddIntegral: number
  /** 昨日消费UU币 */
  yesterdayUseIntegral: number
  /** 今日发放达达券 */
  todayAddMoney2: number
  /** 今日消费达达券 */
  todayUseMoney2: number
  /** 昨日发放达达券 */
  yesterdayAddMoney2: number
  /** 昨日消费达达券 */
  yesterdayUseMoney2: number
}

/**
 * 收入汇总统计响应接口
 */
export interface IncomeSummaryStats {
  /** 订单收入（RMB+钻石） */
  todayIncome: number
  /** RMB收入 */
  rmbIncome: number
  /** 钻石商城收入 */
  diamondIncome: number
  /** 其他收入 */
  otherIncome: number
  /** 订单出货（今日出货奖品总价值） */
  shippedToday: number
  /** 支出 */
  expenses: number
  /** 当天发货金额 */
  todayShipped: number
  /** 当天用户剩余达达券 */
  remainingCoupon: number
  /** 盒柜剩余价值 */
  boxRemaining: number
  /** 利润 */
  profit: number
  /** 利润计算公式 */
  formula: string
}

// ==================== API 基础路径 ====================

const STATISTICS_BASE_URL = '/admin/business/statistics'

// ==================== 统计 API ====================

/**
 * 获取今日订单统计数据
 * @returns 今日订单统计数据
 */
export function getTodayOrderStats(): Promise<ApiResponse<TodayOrderStats>> {
  return request({
    url: `${STATISTICS_BASE_URL}/today-order`,
    method: 'get'
  })
}

/**
 * 获取货币信息统计数据
 * @returns 货币信息统计数据
 */
export function getCurrencyInfoStats(): Promise<ApiResponse<CurrencyInfoStats>> {
  return request({
    url: `${STATISTICS_BASE_URL}/currency-info`,
    method: 'get'
  })
}

/**
 * 获取收入汇总统计数据
 * @returns 收入汇总统计数据
 */
export function getIncomeSummaryStats(): Promise<ApiResponse<IncomeSummaryStats>> {
  return request({
    url: `${STATISTICS_BASE_URL}/income-summary`,
    method: 'get'
  })
}

/**
 * 用户统计响应接口
 */
export interface UserStats {
  /** 绑定手机号人数 */
  userRegisterCount: number
  /** 抽奖人数（有抽奖记录的用户总数） */
  consumingUserCount: number
  /** 用户剩余钻石 */
  userMoney: number
  /** 用户剩余UU币 */
  userIntegral: number
  /** 用户剩余达达券 */
  userMoney2: number
  /** 微信支付金额（历史微信支付总额） */
  orderPriceTotal: number
  /** 订单支付数量（历史支付成功订单总数） */
  orderTotalCount: number
  /** 用户出货总金额 */
  totalGoodsAmount: number
  /** 用户盒柜剩余价值 */
  boxRemainingValue: number
  /** 用户已兑换的达达券 */
  exchangedCoupon: number
  /** 用户已发货金额 */
  shippedAmount: number
}

/**
 * 获取用户统计数据
 * @returns 用户统计数据
 */
export function getUserStats(): Promise<ApiResponse<UserStats>> {
  return request({
    url: `${STATISTICS_BASE_URL}/user-stats`,
    method: 'get'
  })
}

// ==================== 盒子统计类型定义 ====================

/**
 * 盒子统计请求参数
 */
export interface BoxStatisticsParams {
  /** 盒子ID */
  goodsId: number
  /** 开始时间 */
  startTime?: string
  /** 结束时间 */
  endTime?: string
}

/**
 * 盒子统计响应
 */
export interface BoxStatistics {
  /** 盒子ID */
  id: number
  /** 消费金额（充值金额 + 余额消费） */
  useMoney: number
  /** 出货成本（奖品价值） */
  scMoney: number
  /** 兑换成本（已回收的奖品价值） */
  reMoney: number
  /** 发货成本（已发货的奖品价值） */
  fhMoney: number
  /** 抽奖次数 */
  cjCount: number
  /** 利润 */
  profit: number
  /** 利润率 */
  profitRate: number
  /** 是否亏损 */
  isNegative: boolean
}

/**
 * 盒子利润列表请求参数
 */
export interface BoxProfitListParams {
  /** 页码 */
  page?: number
  /** 每页数量 */
  pageSize?: number
  /** 盒子ID */
  goodsId?: number
  /** 盒子名称 */
  title?: string
  /** 状态 */
  status?: number
  /** 盒子类型 */
  type?: number
  /** 开始时间 */
  startTime?: string
  /** 结束时间 */
  endTime?: string
}

/**
 * 盒子利润列表项
 */
export interface BoxProfitItem {
  /** 盒子ID */
  id: number
  /** 盒子名称 */
  title: string
  /** 盒子图片 */
  imgUrl: string
  /** 单价 */
  price: number
  /** 库存 */
  stock: number
  /** 状态 */
  status: number
  /** 状态名称 */
  statusName: string
  /** 盒子类型 */
  type: number
  /** 类型名称 */
  typeName: string
  /** 消费金额 */
  useMoney: number
  /** 出货成本 */
  scMoney: number
  /** 兑换成本 */
  reMoney: number
  /** 发货成本 */
  fhMoney: number
  /** 抽奖次数 */
  cjCount: number
  /** 利润 */
  profit: number
  /** 利润率 */
  profitRate: number
  /** 是否亏损 */
  isNegative: boolean
  /** 是否已加载统计数据 */
  loaded: boolean
}

/**
 * 盒子利润汇总
 */
export interface BoxProfitSummary {
  /** 总收入 */
  totalIncome: number
  /** 总成本 */
  totalCost: number
  /** 总利润 */
  totalProfit: number
  /** 总兑换金额 */
  totalReMoney: number
  /** 总发货金额 */
  totalFhMoney: number
  /** 总抽奖次数 */
  totalCjCount: number
  /** 利润率 */
  profitRate: number
  /** 是否亏损 */
  isNegative: boolean
}

/**
 * 盒子利润列表响应
 */
export interface BoxProfitListResponse {
  code: number
  msg: string
  count: number
  data: BoxProfitItem[]
  summary: BoxProfitSummary
}

// ==================== 盒子统计 API ====================

/**
 * 获取单个盒子的统计数据
 * @param params 请求参数
 * @returns 盒子统计数据
 */
export function getBoxStatistics(params: BoxStatisticsParams): Promise<ApiResponse<{ code: number; msg: string; data: BoxStatistics }>> {
  return request({
    url: `${STATISTICS_BASE_URL}/box-statistics`,
    method: 'get',
    params
  })
}

/**
 * 获取盒子利润统计列表
 * @param params 请求参数
 * @returns 盒子利润统计列表
 */
export function getBoxProfitList(params: BoxProfitListParams): Promise<ApiResponse<BoxProfitListResponse>> {
  return request({
    url: `${STATISTICS_BASE_URL}/box-profit-list`,
    method: 'get',
    params
  })
}

/**
 * 盒子汇总统计请求参数
 */
export interface BoxSummaryStatisticsParams {
  /** 盒子ID */
  goodsId?: number
  /** 盒子名称 */
  title?: string
  /** 状态 */
  status?: number
  /** 盒子类型 */
  type?: number
  /** 开始时间 */
  startTime?: string
  /** 结束时间 */
  endTime?: string
}

/**
 * 获取所有盒子的汇总统计数据
 * @param params 请求参数
 * @returns 汇总统计数据
 */
export function getSummaryStatistics(params: BoxSummaryStatisticsParams): Promise<ApiResponse<{ code: number; msg: string; data: BoxProfitSummary }>> {
  return request({
    url: `${STATISTICS_BASE_URL}/summary-statistics`,
    method: 'get',
    params
  })
}
