/**
 * 租户详情/配额/订阅/账单相关类型（Milestone 1 预置）
 *
 * 说明：
 * - 遵循零 Any 原则
 * - 所有 Snowflake ID 一律使用 string
 * - 已存在的全局类型（Api.*）优先复用，避免重复定义与漂移
 */

/**
 * Snowflake ID（后端 long -> 前端 string）
 */
export type SnowflakeId = string

/**
 * 租户详情（来自 Swagger: TenantDetailDto）
 */
export type TenantDetailDto = Api.Tenant.TenantDetailDto

/**
 * 更新租户命令（TD-001）
 *
 * 说明：
 * - Swagger 当前未提供 UpdateTenantCommand，按现有页面字段 + 合理推断补齐
 * - Snowflake ID 一律使用 string
 * - 待后端补齐 PUT /api/admin/v1/tenants/{tenantId} 后，可按 Swagger 对齐字段
 */
export interface UpdateTenantCommand {
  tenantId: SnowflakeId

  name: string
  shortName?: string
  industry?: string
  contactName?: string
  contactPhone?: string
  contactEmail?: string

  logoUrl?: string
  coverImageUrl?: string
  website?: string

  country?: string
  province?: string
  city?: string
  address?: string

  tags?: string
  remarks?: string
}

/**
 * 配额汇总（来自 Swagger: TenantQuotaUsageDto）
 */
export type QuotaSummaryDto = Api.QuotaPackage.TenantQuotaUsageDto

/**
 * 配额使用明细（来自 Swagger: QuotaUsageDto）
 */
export interface QuotaUsageDto {
  id: SnowflakeId
  quotaType: number
  limitValue: number
  usedValue: number
  usagePercentage: number
  remainingValue: number
  resetCycle?: string | null
  lastResetAt?: string | null
}

/**
 * 配额购买记录（来自 Swagger: TenantQuotaPurchaseDto）
 */
export type QuotaPurchaseDto = Api.QuotaPackage.TenantQuotaPurchaseDto

/**
 * 订阅信息（来自 Swagger: TenantSubscriptionDto）
 */
export type SubscriptionDto = Api.Tenant.TenantSubscriptionDto

/**
 * 账单信息（来自 Swagger: TenantBillingDto）
 */
export interface BillingDto {
  id: SnowflakeId
  tenantId: SnowflakeId
  statementNo: string | null
  periodStart: string
  periodEnd: string
  amountDue: number
  amountPaid: number
  status: Api.Billing.TenantBillingStatus
  dueDate: string
  lineItemsJson: string | null
}

/**
 * 配额使用历史记录 DTO（TD-002 待后端接口补充）
 */
export interface QuotaUsageHistoryDto {
  quotaType: number
  usedValue: number
  limitValue: number
  recordedAt: string // ISO 8601
  changeType: 'increase' | 'decrease' | 'init' | 'snapshot'
}
