import type { PageParam } from '@/api'

/**
 * 应用订阅
 */
export interface AppSubscription {
  id?: number
  /** 订阅编号 */
  subscriptionNo?: string
  /** 购买用户ID */
  userId?: number
  /** 应用产品ID */
  productId?: number
  /** 租户ID */
  tenantId?: number

  /** 订阅状态: pending/active/expired/cancelled */
  status?: string
  /** 价格类型: free/one_time/subscription */
  priceType?: string
  /** 原价（分） */
  originalPrice?: number
  /** 实付金额（分） */
  payPrice?: number
  /** 支付方式: 0余额 1微信 3支付宝 12免费 */
  payType?: number
  /** 支付状态: 0未支付 1已支付 */
  payStatus?: number
  /** 支付时间 */
  payTime?: string
  /** 第三方交易号 */
  transactionId?: string

  /** 订阅周期: month/year */
  subscriptionPeriod?: string
  /** 生效时间 */
  startTime?: string
  /** 到期时间 */
  expireTime?: string
  /** 是否自动续费 */
  autoRenew?: number

  /** 分配的域名 */
  instanceDomain?: string
  /** 实例管理后台URL */
  instanceAdminUrl?: string
  /** 实例配置 JSON */
  instanceConfig?: string

  /** 关联的支付订单号 */
  orderNo?: string
  /** 关联的支付订单ID */
  orderId?: number

  /** 关联的产品信息（查询时返回） */
  productName?: string
  productIcon?: string
  productLogo?: string
  productAppType?: number
  productDescription?: string
  developerName?: string

  remark?: string
  deleted?: number
  sortNumber?: number
  createTime?: string
  updateTime?: string
}

/**
 * 订阅搜索条件
 */
export interface AppSubscriptionParam extends PageParam {
  productId?: number
  status?: string
  priceType?: string
  subscriptionNo?: string
  keywords?: string
}

/**
 * 订阅状态枚举
 */
export const SUBSCRIPTION_STATUS = {
  PENDING: 'pending',
  ACTIVE: 'active',
  EXPIRED: 'expired',
  CANCELLED: 'cancelled',
} as const

export type SUBSCRIPTION_STATUS_KEY = keyof typeof SUBSCRIPTION_STATUS

export const SUBSCRIPTION_STATUS_NAME: Record<string, string> = {
  [SUBSCRIPTION_STATUS.PENDING]: '待支付',
  [SUBSCRIPTION_STATUS.ACTIVE]: '生效中',
  [SUBSCRIPTION_STATUS.EXPIRED]: '已过期',
  [SUBSCRIPTION_STATUS.CANCELLED]: '已取消',
}

/**
 * 订阅结果
 */
export interface SubscribeResult {
  subscriptionId?: number
  subscriptionNo?: string
  status?: string
  message?: string
  payPrice?: number
  orderNo?: string
}
