/**
 * 订阅管理相关类型定义
 */
declare namespace Api {
  namespace Subscription {
    /** 订阅状态枚举 */
    enum SubscriptionStatus {
      /** 待激活 */
      Pending = 0,
      /** 生效中 */
      Active = 1,
      /** 宽限期 */
      GracePeriod = 2,
      /** 已取消 */
      Cancelled = 3,
      /** 已暂停 */
      Suspended = 4
    }

    /** 订阅列表查询参数 */
    interface SubscriptionListParams extends Common.PageParams {
      /** 订阅状态 */
      Status?: SubscriptionStatus
      /** 套餐 ID */
      TenantPackageId?: string
      /** 租户 ID */
      TenantId?: string
      /** 租户关键词（名称或编码模糊匹配） */
      TenantKeyword?: string
      /** 到期时间筛选：未来 N 天内到期 */
      ExpiringWithinDays?: number
      /** 是否自动续费筛选 */
      AutoRenew?: boolean
      /** 到期时间范围开始 */
      ExpireFrom?: string
      /** 到期时间范围结束 */
      ExpireTo?: string
    }

    /** 订阅列表响应 */
    type SubscriptionListResponse = Common.PageResult<SubscriptionListDto>

    /** 订阅列表项 DTO */
    interface SubscriptionListDto {
      /** 订阅 ID */
      id: string
      /** 租户 ID */
      tenantId: string
      /** 租户名称 */
      tenantName: string
      /** 租户编码 */
      tenantCode: string
      /** 当前套餐 ID */
      tenantPackageId: string
      /** 当前套餐名称 */
      packageName: string
      /** 当前套餐名称（别名，兼容旧代码） */
      tenantPackageName?: string
      /** 排期套餐 ID（下周期生效） */
      scheduledPackageId?: string
      /** 排期套餐名称 */
      scheduledPackageName?: string
      /** 订阅状态 */
      status: SubscriptionStatus
      /** 生效时间（UTC） */
      effectiveFrom: string
      /** 到期时间（UTC） */
      effectiveTo: string
      /** 下次计费时间 */
      nextBillingDate?: string
      /** 是否自动续费 */
      autoRenew: boolean
      /** 备注信息 */
      notes?: string
      /** 创建时间 */
      createdAt: string
      /** 更新时间 */
      updatedAt?: string
    }

    /** 简化订阅 DTO（用于操作后返回） */
    type SubscriptionDto = SubscriptionListDto

    /** 订阅详情 DTO */
    interface SubscriptionDetailDto extends SubscriptionListDto {
      /** 当前套餐信息 */
      package?: TenantPackageDto
      /** 排期套餐信息 */
      scheduledPackage?: TenantPackageDto
      /** 配额使用情况列表 */
      quotaUsages: QuotaUsageDto[]
      /** 配额使用情况列表（别名，兼容旧代码） */
      quotaUsage?: QuotaUsageDto[]
      /** 订阅变更历史列表 */
      changeHistory: SubscriptionHistoryDto[]
    }

    /** 租户套餐 DTO */
    interface TenantPackageDto {
      id: string
      name: string
      description?: string
      packageType: number
      monthlyPrice?: number
      yearlyPrice?: number
      maxStoreCount?: number
      maxAccountCount?: number
      maxStorageGb?: number
      maxSmsCredits?: number
      maxDeliveryOrders?: number
      featurePoliciesJson?: string
      isActive: boolean
      isPublicVisible: boolean
      isAllowNewTenantPurchase: boolean
      publishStatus: number
      isRecommended: boolean
      tags: string[]
      sortOrder: number
    }

    /** 配额使用情况 DTO */
    interface QuotaUsageDto {
      quotaType: number
      quotaName: string
      limit?: number
      used: number
      remaining?: number
      usagePercentage?: number
    }

    /** 订阅历史 DTO */
    interface SubscriptionHistoryDto {
      id: string
      subscriptionId: string
      changeType: string
      previousPackageId?: string
      previousPackageName?: string
      newPackageId?: string
      newPackageName?: string
      previousEffectiveTo?: string
      newEffectiveTo?: string
      notes?: string
      /** 描述（兼容旧代码） */
      description?: string
      createdAt: string
      /** 时间戳（兼容旧代码，等同于 createdAt） */
      timestamp?: string
      createdBy?: string
    }

    /** 更新订阅命令 */
    interface UpdateSubscriptionCommand {
      subscriptionId: string
      autoRenew?: boolean
      notes?: string
    }

    /** 延期订阅命令 */
    interface ExtendSubscriptionCommand {
      subscriptionId: string
      durationMonths: number
      notes?: string
    }

    /** 变更套餐命令 */
    interface ChangePlanCommand {
      subscriptionId: string
      targetPackageId: string
      immediate: boolean
      notes?: string
    }

    /** 更新订阅状态命令 */
    interface UpdateStatusCommand {
      subscriptionId: string
      status: SubscriptionStatus
      notes?: string
    }

    /** 批量操作结果 */
    interface BatchOperationResult {
      successCount: number
      failedCount: number
      results: BatchOperationItem[]
    }

    /** 批量操作项结果 */
    interface BatchOperationItem {
      subscriptionId: string
      success: boolean
      message?: string
    }
  }
}
