/**
 * 套餐管理系统类型定义
 * 使用下划线命名与后端 API 保持一致
 */

import { PaginationParams } from './common'

// ==================== 套餐系列管理 ====================

/**
 * 一次性佣金梯度档位配置（套餐系列级别）
 */
export interface OneTimeCommissionTier {
  threshold: number // 达标阈值
  dimension: 'sales_count' | 'sales_amount' // 统计维度：销量或销售额
  amount: number // 佣金金额（分）
  stat_scope?: 'self' | 'self_and_sub' // 统计范围：仅自己或自己+下级
  operator?: '>=' | '>' | '<=' | '<' // 阈值比较运算符，空值时计算引擎默认 >=
}

/**
 * 套餐系列一次性佣金配置
 */
export interface SeriesOneTimeCommissionConfig {
  enable?: boolean // 是否启用一次性佣金
  commission_type?: 'fixed' | 'tiered' // 佣金类型：固定或梯度
  commission_amount?: number // 固定佣金金额（分），commission_type=fixed时使用
  threshold?: number // 触发阈值（分）
  trigger_type?: 'first_recharge' | 'accumulated_recharge' // 触发类型：首充或累计充值
  tiers?: OneTimeCommissionTier[] | null // 梯度配置列表，commission_type=tiered时使用
  enable_force_recharge?: boolean // 是否启用强充
  force_amount?: number // 强充金额（分）
  force_calc_type?: 'fixed' | 'dynamic' // 强充计算类型：固定或动态
  validity_type?: 'permanent' | 'fixed_date' | 'relative' // 时效类型：永久、固定日期或相对时长
  validity_value?: string // 时效值（日期或月数）
}

/**
 * 套餐系列响应
 */
export interface PackageSeriesResponse {
  id: number
  series_code: string
  series_name: string
  description?: string
  enable_one_time_commission: boolean // 是否启用一次性佣金
  one_time_commission_config?: SeriesOneTimeCommissionConfig // 一次性佣金配置
  status: number // 1:启用, 2:禁用
  created_at: string
  updated_at: string
}

/**
 * 套餐系列查询参数
 */
export interface PackageSeriesQueryParams extends PaginationParams {
  series_name?: string // 系列名称（模糊搜索）
  status?: number // 状态筛选
  enable_one_time_commission?: boolean // 是否启用一次性佣金筛选
}

/**
 * 创建套餐系列请求
 */
export interface CreatePackageSeriesRequest {
  series_code: string // 系列编码，必填
  series_name: string // 系列名称，必填
  description?: string // 描述，可选
  one_time_commission_config?: SeriesOneTimeCommissionConfig // 一次性佣金配置，可选
}

/**
 * 更新套餐系列请求
 */
export interface UpdatePackageSeriesRequest {
  series_name?: string
  description?: string
  one_time_commission_config?: SeriesOneTimeCommissionConfig // 一次性佣金配置，可选
}

/**
 * 更新套餐系列状态请求
 */
export interface UpdatePackageSeriesStatusRequest {
  status: number // 1:启用, 2:禁用
}

// ==================== 套餐管理 ====================

/**
 * 返佣档位信息
 */
export interface CommissionTierInfo {
  current_rate?: string // 当前返佣比例
  next_rate?: string // 下一档位返佣比例
  next_threshold?: number | null // 下一档位阈值
}

/**
 * 套餐到期计时基准枚举
 */
export type ExpiryBase = 'from_activation' | 'from_purchase'

// 套餐分配生效条件覆盖值
export type PackageAllocationExpiryBaseOverride = 'from_purchase' | 'from_activation'

// 店铺套餐分配生效条件字段
export interface PackageAllocationExpiryBaseFields {
  default_expiry_base?: string | null
  default_expiry_base_name?: string | null
  expiry_base_override?: PackageAllocationExpiryBaseOverride | null
  expiry_base_override_name?: string | null
  effective_expiry_base?: string | null
  effective_expiry_base_name?: string | null
}

// 创建店铺套餐分配请求
export interface CreateShopPackageAllocationRequest {
  shop_id: number
  package_id: number
  cost_price: number
  expiry_base_override: PackageAllocationExpiryBaseOverride | null
}

// 更新店铺套餐分配生效条件请求
export interface UpdateShopPackageAllocationExpiryBaseRequest {
  expiry_base_override: PackageAllocationExpiryBaseOverride | null
}

// 店铺套餐分配响应
export interface ShopPackageAllocationResponse extends PackageAllocationExpiryBaseFields {
  id: number
  shop_id: number
  package_id: number
  cost_price: number
}

/**
 * 套餐响应
 */
export interface PackageResponse {
  id: number
  package_code: string
  package_name: string
  series_id: number | null
  series_name?: string | null
  package_type: string // 'formal':正式套餐, 'addon':附加套餐
  calendar_type?: string // 套餐周期类型 (natural_month:自然月, by_day:按天)
  duration_days?: number | null // 套餐天数(calendar_type=by_day时有值)
  duration_months?: number // 套餐时长(月数)
  data_reset_cycle?: string // 流量重置周期 (daily:每日, monthly:每月, yearly:每年, none:不重置)
  real_data_mb?: number // 真流量额度（MB）
  virtual_data_mb?: number // 虚流量额度（MB）
  virtual_ratio?: number // 虚流量比例（real_data_mb / virtual_data_mb）。启用虚流量时计算，否则为 1.0
  enable_virtual_data?: boolean // 是否启用虚流量
  expiry_base?: ExpiryBase // 到期计时基准: from_activation(实名激活时起算) / from_purchase(购买时起算)
  cost_price?: number // 成本价（分）
  suggested_retail_price?: number | null // 建议零售价（分），可能为 null 表示"未配置"
  retail_price?: number | null // 原始代理零售价（分），可能为 null
  is_gift?: boolean // 是否为赠送套餐
  price_config_status?: string // 价格配置状态
  price_config_status_name?: string // 价格配置状态名称
  effective_retail_price?: number | null // 有效零售价（分）
  retail_price_config_status?: string // 零售价配置状态（代理视角）
  current_commission_rate?: string // 当前返佣比例（仅代理用户可见）
  one_time_commission_amount?: number | null // 一次性佣金金额（分，代理视角）
  profit_margin?: number | null // 利润空间（分，仅代理用户可见）
  tier_info?: CommissionTierInfo // 返佣档位信息
  shelf_status?: number // 上架状态 (1:上架, 2:下架)
  status?: number // 状态 (1:启用, 2:禁用)
  description?: string
  created_at?: string
  updated_at?: string
}

/**
 * 套餐查询参数
 */
export interface PackageQueryParams extends PaginationParams {
  package_name?: string // 套餐名称（模糊搜索）
  series_id?: number // 系列ID
  package_type?: string // 套餐类型
  data_type?: string // 流量类型
  shelf_status?: number // 上架状态
  status?: number // 状态
}

/**
 * 创建套餐请求
 */
export interface CreatePackageRequest {
  package_code: string // 套餐编码，必填
  package_name: string // 套餐名称，必填
  series_id?: number | null // 所属系列ID，可选
  package_type: string // 套餐类型，必填 (formal:正式套餐, addon:附加套餐)
  calendar_type?: string | null // 套餐周期类型 (natural_month:自然月, by_day:按天)，可选
  duration_days?: number | null // 套餐天数(calendar_type=by_day时必填)，可选
  duration_months: number // 套餐时长(月数)，必填
  data_reset_cycle?: string | null // 流量重置周期 (daily:每日, monthly:每月, yearly:每年, none:不重置)，可选
  real_data_mb?: number | null // 真流量额度（MB），可选
  virtual_data_mb?: number | null // 虚流量额度（MB），可选
  enable_virtual_data?: boolean // 是否启用虚流量，可选
  expiry_base?: ExpiryBase | null // 到期计时基准: from_activation(实名激活时起算) / from_purchase(购买时起算)，可选
  cost_price: number // 成本价（分），必填
  suggested_retail_price?: number | null // 建议零售价（分），普通套餐可不传或为null表示"未配置"，赠送套餐必须传0
  is_gift?: boolean // 是否为赠送套餐
}

/**
 * 更新套餐请求
 */
export interface UpdatePackageRequest {
  package_name?: string | null // 套餐名称，可选
  series_id?: number | null // 所属系列ID，可选
  package_type?: string | null // 套餐类型，可选 (formal:正式套餐, addon:附加套餐)
  calendar_type?: string | null // 套餐周期类型 (natural_month:自然月, by_day:按天)，可选
  duration_days?: number | null // 套餐天数(calendar_type=by_day时必填)，可选
  duration_months?: number | null // 套餐时长(月数)，可选
  data_reset_cycle?: string | null // 流量重置周期 (daily:每日, monthly:每月, yearly:每年, none:不重置)，可选
  real_data_mb?: number | null // 真流量额度（MB），可选
  virtual_data_mb?: number | null // 虚流量额度（MB），可选
  enable_virtual_data?: boolean | null // 是否启用虚流量，可选
  expiry_base?: ExpiryBase | null // 到期计时基准，可选
  cost_price?: number | null // 成本价（分），可选
  suggested_retail_price?: number | null // 建议零售价（分），不能再用0表示"清空"，清空要用 clear_suggested_retail_price
  is_gift?: boolean // 是否为赠送套餐
  clear_suggested_retail_price?: boolean // 清空建议零售价（当需要将价格设为null时使用）
}

/**
 * 更新套餐状态请求
 */
export interface UpdatePackageStatusRequest {
  status: number // 1:启用, 2:禁用
}

/**
 * 更新套餐上架状态请求
 */
export interface UpdatePackageShelfStatusRequest {
  shelf_status: number // 1:上架, 2:下架
}

/**
 * 系列下拉选项响应
 */
export interface SeriesSelectOption {
  id: number
  series_name: string
  series_code: string
  enable_one_time_commission?: boolean // 是否启用一次性佣金
  one_time_commission_config?: SeriesOneTimeCommissionConfig // 一次性佣金配置
}

// ==================== 代理系列授权 (新接口) ====================

/**
 * 佣金梯度配置
 */
export interface CommissionTier {
  operator?: '>=' | '>' | '<=' | '<' // 阈值比较运算符，空值时计算引擎默认 >=
  threshold: number // 阈值
  amount: number // 佣金金额（分）
  dimension?: 'sales_count' | 'sales_amount' // 统计维度 (sales_count:销量, sales_amount:销售额)
  stat_scope?: 'self' | 'self_and_sub' // 统计范围 (self:仅自己, self_and_sub:自己+下级)
}

/**
 * 套餐信息（用于系列授权）
 */
export interface GrantPackageInfo extends PackageAllocationExpiryBaseFields {
  allocation_id?: number
  package_id: number
  package_name?: string
  package_code?: string
  cost_price: number // 成本价（分）
  shelf_status?: number // 上架状态
  status?: number // 状态
}

/**
 * 代理系列授权响应
 */
export interface ShopSeriesGrantResponse {
  id: number
  shop_id: number
  shop_name: string
  series_id: number
  series_name: string
  series_code?: string
  commission_type: 'fixed' | 'tiered' // 佣金类型：固定或梯度
  one_time_commission_amount: number // 固定佣金金额（分）
  commission_tiers: CommissionTier[] // 梯度配置列表
  force_recharge_locked: boolean // 是否被平台锁定（true时前端只读）
  force_recharge_enabled: boolean // 是否启用强充
  force_recharge_amount: number // 强充金额（分）
  allocator_shop_id: number // 分配者店铺ID，0表示平台
  allocator_shop_name: string // 分配者店铺名称
  package_count?: number // 套餐数量
  packages?: GrantPackageInfo[] // 套餐列表
  status: number // 1:启用, 2:禁用
  created_at: string
  updated_at?: string
}

/**
 * 代理系列授权查询参数
 */
export interface ShopSeriesGrantQueryParams extends PaginationParams {
  shop_id?: number // 店铺ID筛选
  series_id?: number // 系列ID筛选
  allocator_shop_id?: number // 分配者店铺ID筛选
  status?: number // 状态筛选
}

/**
 * 创建代理系列授权请求
 */
export interface CreateShopSeriesGrantRequest {
  shop_id: number // 店铺ID，必填
  series_id: number // 系列ID，必填
  one_time_commission_amount?: number // 固定佣金金额（分），固定模式时必填
  commission_tiers?: CommissionTier[] // 梯度配置列表，梯度模式时必填
  enable_force_recharge?: boolean // 是否启用强充
  force_recharge_amount?: number // 强充金额（分）
  packages?: GrantPackageInfo[] // 套餐列表
}

/**
 * 更新代理系列授权请求
 */
export interface UpdateShopSeriesGrantRequest {
  one_time_commission_amount?: number // 固定佣金金额（分）
  commission_tiers?: CommissionTier[] // 梯度配置列表
  enable_force_recharge?: boolean // 是否启用强充（force_recharge_locked=true时忽略）
  force_recharge_amount?: number // 强充金额（分）
}

/**
 * 管理套餐请求中的套餐项
 */
export interface GrantPackageItem {
  package_id?: number // 套餐ID
  cost_price?: number // 成本价（分）
  remove?: boolean | null // 是否删除该套餐授权（true=删除）
}

/**
 * 管理套餐请求
 */
export interface ManageGrantPackagesRequest {
  packages?: GrantPackageItem[] | null // 套餐操作列表
}
