/**
 * 佣金相关类型定义
 */

import { PaginationParams } from '@/types'

// 佣金状态
export enum CommissionStatus {
  FROZEN = 1, // 已冻结
  UNFREEZING = 2, // 解冻中
  RELEASED = 3, // 已发放
  INVALID = 4, // 已失效
  PENDING_CORRECTION = 99 // 待人工修正
}

// 提现状态
export enum WithdrawalStatus {
  PENDING = 1, // 待审核
  APPROVED = 2, // 已通过
  REJECTED = 3, // 已拒绝
  COMPLETED = 4 // 已到账
}

// 佣金类型
export enum CommissionType {
  ONE_TIME = 'one_time', // 一次性佣金
  LONG_TERM = 'long_term' // 长期佣金
}

// 提现方式
export enum WithdrawalMethod {
  ALIPAY = 'alipay', // 支付宝
  WECHAT = 'wechat', // 微信
  BANK = 'bank' // 银行卡
}

// 放款类型
export enum PaymentType {
  MANUAL = 'manual' // 人工打款
}

// ==================== 提现申请相关 ====================

/**
 * 提现申请项
 */
export interface WithdrawalRequestItem {
  id: number // 提现申请ID
  withdrawal_no: string // 提现单号
  shop_id: number // 店铺ID
  shop_name: string // 店铺名称
  shop_hierarchy?: string // 店铺层级路径
  amount: number // 提现金额(分)
  actual_amount: number // 实际到账金额(分)
  fee: number // 手续费(分)
  fee_rate: number // 手续费比率(基点,100=1%)
  withdrawal_method: WithdrawalMethod // 提现方式
  account_name: string // 收款账户名称
  account_number: string // 收款账号
  bank_name?: string // 银行名称
  status: WithdrawalStatus // 状态
  status_name: string // 状态名称
  payment_type: PaymentType // 放款类型
  applicant_id: number // 申请人账号ID
  applicant_name: string // 申请人用户名
  processor_id?: number // 处理人账号ID
  processor_name?: string // 处理人用户名
  reject_reason?: string // 拒绝原因
  remark?: string // 备注
  created_at: string // 申请时间
  processed_at?: string // 处理时间
  paid_at?: string // 到账时间
}

/**
 * 提现申请查询参数
 */
export interface WithdrawalRequestQueryParams extends PaginationParams {
  page_size?: number // 每页数量
  status?: WithdrawalStatus // 状态筛选
  withdrawal_no?: string // 提现单号
  shop_name?: string // 店铺名称
  start_time?: string // 申请开始时间
  end_time?: string // 申请结束时间
}

/**
 * 审批提现申请参数
 */
export interface ApproveWithdrawalParams {
  remark?: string // 审批备注
}

/**
 * 拒绝提现申请参数
 */
export interface RejectWithdrawalParams {
  reject_reason: string // 拒绝原因
  remark: string // 备注（必填）
}

// ==================== 提现配置相关 ====================

/**
 * 提现配置项
 */
export interface WithdrawalSettingItem {
  id: number // 配置ID
  min_withdrawal_amount: number // 最低提现金额(分)
  fee_rate: number // 手续费比率(基点,100=1%)
  daily_withdrawal_limit: number // 每日提现次数限制
  arrival_days: number // 到账天数
  is_active: boolean // 是否生效
  creator_id?: number // 创建人ID
  creator_name?: string // 创建人用户名
  created_at: string // 创建时间
}

/**
 * 创建提现配置参数
 */
export interface CreateWithdrawalSettingParams {
  min_withdrawal_amount: number // 最低提现金额(分)
  fee_rate: number // 手续费比率(基点,100=1%)
  daily_withdrawal_limit: number // 每日提现次数限制
}

// ==================== 佣金记录相关 ====================

/**
 * 我的佣金记录项
 */
export interface MyCommissionRecordItem {
  id: number // 佣金记录ID
  amount: number // 佣金金额(分)
  commission_type: CommissionType // 佣金类型
  status: CommissionStatus // 状态
  order_id?: number // 订单ID
  shop_id: number // 店铺ID
  created_at: string // 创建时间
}

/**
 * 佣金记录查询参数
 */
export interface CommissionRecordQueryParams extends PaginationParams {
  page_size?: number // 每页数量
  commission_source?: string // 佣金来源（cost_diff:成本差价，one_time:一次性佣金）
  status?: number // 状态（1已入账，2已失效）
  start_time?: string // 开始时间
  end_time?: string // 结束时间
  iccid?: string // ICCID（模糊查询）
  virtual_no?: string // 设备虚拟号（模糊查询）
  order_no?: string // 订单号（模糊查询）
}

/**
 * 我的佣金概览
 */
export interface MyCommissionSummary {
  main_balance: number // 预充值余额(分)
  total_commission: number // 总佣金(分)
  available_commission: number // 可提现佣金(分)
  frozen_commission: number // 冻结中佣金(分)
  withdrawing_commission: number // 提现中佣金(分)
  withdrawn_commission: number // 已提现佣金(分)
}

/**
 * 发起提现申请参数
 */
export interface SubmitWithdrawalParams {
  amount: number // 提现金额(分)
  withdrawal_method: WithdrawalMethod // 提现方式
  account_name: string // 收款账户名称
  account_number: string // 收款账号
  bank_name?: string // 银行名称(银行卡提现时必填)
  remark?: string // 备注
}

// ==================== 代理商资金概况相关 ====================

/**
 * 代理商资金记录项
 */
export interface ShopCommissionRecordItem {
  id: number // 佣金记录ID
  amount: number // 佣金金额(分)
  balance_after: number // 入账后佣金余额(分)
  commission_source: string // 佣金来源（cost_diff:成本差价，one_time:一次性佣金）
  status: number // 状态（1已冻结, 2解冻中, 3已发放, 4已失效）
  status_name: string // 状态名称
  order_id?: number // 订单ID
  order_no?: string // 订单号
  order_created_at?: string // 订单创建时间
  iccid?: string // ICCID
  virtual_no?: string // 虚拟号（原 device_no）
  created_at: string // 佣金入账时间
  seller_shop_id?: number // 卖家店铺ID
  seller_shop_name?: string // 卖家店铺名称
}

/**
 * 代理商资金汇总项（原佣金汇总项）
 */
export interface ShopFundSummaryItem {
  shop_id: number // 店铺ID
  shop_code: string // 店铺编码
  shop_name: string // 店铺名称
  username?: string // 主账号用户名
  phone?: string // 主账号手机号
  main_balance: number // 预充值余额(分)
  main_frozen_balance: number // 预充值冻结余额(分)
  balance: number // 现金余额(分)
  frozen_balance: number // 现金冻结金额(分)
  cash_available: number // 现金可用余额(分)
  low_balance_warning: boolean // 现金可用余额不足100元预警
  credit_enabled: boolean // 实际信用额度是否启用
  credit_limit: number // 实际信用额度(分)
  available_balance: number // 可用金额(分)，以后端返回为准
  is_in_debt: boolean // 是否欠款，以后端返回为准
  debt_amount: number // 欠款金额(分)，以后端返回为准
  version: number // 资金概况版本，用于并发控制
  total_commission: number // 总佣金(分)
  available_commission: number // 可提现佣金(分)
  frozen_commission: number // 冻结中佣金(分)
  withdrawing_commission: number // 提现中佣金(分)
  withdrawn_commission: number // 已提现佣金(分)
  unwithdraw_commission: number // 未提现佣金(分)
  created_at?: string // 店铺创建时间
}

/**
 * @deprecated 使用 ShopFundSummaryItem 代替
 */
export type ShopCommissionSummaryItem = ShopFundSummaryItem

/**
 * 代理商资金汇总查询参数（原佣金汇总查询参数）
 */
export interface ShopFundSummaryQueryParams extends PaginationParams {
  shop_name?: string // 店铺名称
  username?: string // 用户名
}

/**
 * @deprecated 使用 ShopFundSummaryQueryParams 代替
 */
export type ShopCommissionSummaryQueryParams = ShopFundSummaryQueryParams

// ==================== 响应类型 ====================

export interface WithdrawalRequestPageResult {
  items: WithdrawalRequestItem[] | null
  page: number
  size: number
  total: number
}

export interface WithdrawalSettingListResult {
  items: WithdrawalSettingItem[]
}

export interface MyCommissionRecordPageResult {
  items: MyCommissionRecordItem[] | null
  page: number
  size: number
  total: number
}

export interface ShopCommissionRecordPageResult {
  items: ShopCommissionRecordItem[] | null
  page: number
  size: number
  total: number
}

export interface ShopFundSummaryPageResult {
  items: ShopFundSummaryItem[] | null
  page: number
  size: number
  total: number
}

/**
 * @deprecated 使用 ShopFundSummaryPageResult 代替
 */
export type ShopCommissionSummaryPageResult = ShopFundSummaryPageResult

// ==================== 预充值钱包相关 ====================

/**
 * 交易类型
 */
export enum MainWalletTransactionType {
  RECHARGE = 'recharge', // 充值入账
  DEDUCT = 'deduct', // 套餐扣款
  REFUND = 'refund' // 退款
}

/**
 * 预充值钱包交易记录项
 */
export interface MainWalletTransactionItem {
  id: number // 交易记录ID
  transaction_type: MainWalletTransactionType // 交易类型
  transaction_subtype: string // 交易子类型
  amount: number // 交易金额(分，正数为入账，负数为扣款)
  balance_before: number // 交易前余额(分)
  balance_after: number // 交易后余额(分)
  asset_identifier?: string // 资产标识（ICCID或设备号）
  remark: string // 备注
  created_at: string // 交易时间
}

/**
 * 预充值钱包交易记录查询参数
 */
export interface MainWalletTransactionQueryParams extends PaginationParams {
  transaction_type?: MainWalletTransactionType // 交易类型过滤
  start_date?: string // 开始日期 YYYY-MM-DD
  end_date?: string // 结束日期 YYYY-MM-DD
  asset_identifier?: string // 资产标识精确检索（ICCID 或设备虚拟号）
}

/**
 * 预充值钱包交易记录分页结果
 */
export interface MainWalletTransactionPageResult {
  items: MainWalletTransactionItem[] | null
  page: number
  size: number
  total: number
}

// ==================== 我的佣金统计相关 ====================

/**
 * 代理商资金统计查询参数（shop_id 通过路径参数传递，不再在 query 中）
 */
export interface ShopCommissionStatsQueryParams {
  start_time?: string // 开始时间
  end_time?: string // 结束时间
}

/**
 * @deprecated 使用 ShopCommissionStatsQueryParams 代替，shop_id 改为路径参数
 */
export type MyCommissionStatsQueryParams = ShopCommissionStatsQueryParams

/**
 * 代理商资金统计响应
 */
export interface CommissionStatsResponse {
  total_amount: number // 总收入（分）
  cost_diff_amount: number // 成本价差收入（分）
  one_time_amount: number // 一次性佣金收入（分）
  cost_diff_percent: number // 成本价差占比（千分比）
  one_time_percent: number // 一次性佣金占比（千分比）
  total_count: number // 总笔数
  cost_diff_count: number // 成本价差笔数
  one_time_count: number // 一次性佣金笔数
}

/**
 * @deprecated 使用 CommissionStatsResponse 代替
 */
export type MyCommissionStatsResponse = CommissionStatsResponse

/**
 * 代理商每日资金统计查询参数（shop_id 通过路径参数传递）
 */
export interface DailyCommissionStatsQueryParams {
  start_date?: string // 开始日期（YYYY-MM-DD）
  end_date?: string // 结束日期（YYYY-MM-DD）
  days?: number // 查询天数（默认30天，最大365天）
}

/**
 * @deprecated 使用 DailyCommissionStatsQueryParams 代替，shop_id 改为路径参数
 */
export type MyDailyCommissionStatsQueryParams = DailyCommissionStatsQueryParams

/**
 * 每日资金统计项
 */
export interface DailyCommissionStatsItem {
  date: string // 日期（YYYY-MM-DD）
  total_amount: number // 当日总收入（分）
  total_count: number // 当日总笔数
}

// ==================== 佣金记录修正相关 ====================

/**
 * 佣金记录修正动作类型
 */
export type CommissionResolveAction = 'release' | 'invalidate'

/**
 * 佣金记录修正请求参数
 */
export interface ResolveCommissionParams {
  action: CommissionResolveAction // 操作类型：release（入账）/ invalidate（作废）
  amount?: number // 佣金金额（分），action=release 时必填
  remark?: string // 备注（可选，最多500字符）
}
