/**
 * 盒子类型字段配置
 * 定义不同盒子类型的表单字段显示规则
 */

// ==================== 盒子类型枚举 ====================

/**
 * 盒子类型枚举
 * 注意：这里的值对应数据库 goods_types 表的 value 字段
 */
export enum GoodsType {
  YiFanShang = 1,       // 一番赏
  WuXianShang = 2,      // 无限赏
  ShangChengShang = 10, // 商城赏（原盲盒）
  FuLiWu = 15,          // 福利屋
}

/**
 * 盒子类型标签映射
 */
export const GoodsTypeLabels: Record<number, string> = {
  [GoodsType.YiFanShang]: '一番赏',
  [GoodsType.WuXianShang]: '无限赏',
  [GoodsType.ShangChengShang]: '商城赏',
  [GoodsType.FuLiWu]: '福利屋',
}

/**
 * 获取所有盒子类型选项（用于下拉选择）
 */
export const GoodsTypeOptions = Object.entries(GoodsTypeLabels).map(([value, label]) => ({
  value: Number(value),
  label
}))

// ==================== 奖品分类枚举 ====================

/**
 * 奖品分类枚举
 */
export enum PrizeCategory {
  XianHuo = 1,    // 现货
  YuShou = 2,     // 预售
  HuoBi = 3,      // 货币
  BaoXiang = 4,   // 宝箱
}

/**
 * 奖品分类标签映射
 */
export const PrizeCategoryLabels: Record<number, string> = {
  [PrizeCategory.XianHuo]: '现货',
  [PrizeCategory.YuShou]: '预售',
  [PrizeCategory.HuoBi]: '货币',
  [PrizeCategory.BaoXiang]: '宝箱',
}

/**
 * 获取所有奖品分类选项（用于下拉选择）
 */
export const PrizeCategoryOptions = Object.entries(PrizeCategoryLabels).map(([value, label]) => ({
  value: Number(value),
  label
}))

// ==================== 奖品等级配置 ====================

/**
 * 奖品等级选项
 */
export const PrizeLevelOptions = [
  { value: 'SP', label: 'SP' },
  { value: 'A', label: 'A' },
  { value: 'B', label: 'B' },
  { value: 'C', label: 'C' },
  { value: 'D', label: 'D' },
  { value: 'E', label: 'E' },
  { value: 'F', label: 'F' },
  { value: 'LAST', label: 'LAST' },
]

// ==================== 盒子类型字段配置 ====================

/**
 * 盒子类型字段配置接口
 */
export interface GoodsTypeFieldConfig {
  showStock: boolean           // 显示套数
  showLock: boolean            // 显示锁箱配置
  showDailyLimit: boolean      // 显示每日限购
  showRage: boolean            // 显示怒气值
  showItemCard: boolean        // 显示道具卡
  showLingzhu: boolean         // 显示领主配置
  showLianji: boolean          // 显示连击配置
  showTimeConfig: boolean      // 显示时间配置(福利屋)
  showAutoXiajia: boolean      // 显示自动下架
  showCoupon: boolean          // 显示发券开关
  showIntegral: boolean        // 显示发积分开关
  showDescription: boolean     // 显示盒子描述
  showQuanjuXiangou: boolean   // 显示限购次数
  showShowIs: boolean          // 显示首页显示开关
  showUnlockAmount: boolean    // 显示解锁金额
  showCoverImage: boolean      // 显示盒子封面图
  showDetailImage: boolean     // 显示盒子详情图
  showBannerImage: boolean     // 显示商品详情页Banner图
  showPrice: boolean           // 显示盒子价格
  showShouZhe: boolean         // 显示首抽五折
}

/**
 * 默认字段配置
 */
export const defaultFieldConfig: GoodsTypeFieldConfig = {
  showStock: true,
  showLock: true,
  showDailyLimit: true,
  showRage: false,
  showItemCard: false,
  showLingzhu: false,
  showLianji: false,
  showTimeConfig: false,
  showAutoXiajia: false,
  showCoupon: false,
  showIntegral: false,
  showDescription: false,
  showQuanjuXiangou: false,
  showShowIs: true,
  showUnlockAmount: true,
  showCoverImage: true,
  showDetailImage: true,
  showBannerImage: false,
  showPrice: true,
  showShouZhe: true,
}

/**
 * 盒子类型字段配置映射
 * 根据不同的盒子类型，显示/隐藏不同的表单字段
 * 
 * 当前使用的盒子类型（根据数据库 goods_types 表）：
 * - value=1: 一番赏 - 支付方式：微信、钻石、HH币、积分券、优惠券
 * - value=2: 无限赏 - 支付方式：微信、钻石、HH币、积分券、优惠券
 * - value=10: 商城赏 - 支付方式：积分券
 * - value=15: 福利屋 - 支付方式：钻石
 */
export const GoodsTypeFieldConfigs: Record<number, GoodsTypeFieldConfig> = {
  // 一番赏：套数、锁箱、每日限购、首抽五折
  [GoodsType.YiFanShang]: {
    showStock: true, showLock: true, showDailyLimit: true,
    showRage: false, showItemCard: false, showLingzhu: false,
    showLianji: false, showTimeConfig: false, showAutoXiajia: false,
    showCoupon: false, showIntegral: false, showDescription: false,
    showQuanjuXiangou: false, showShowIs: false, showUnlockAmount: true,
    showCoverImage: true, showDetailImage: true, showBannerImage: false,
    showPrice: true, showShouZhe: true,
  },
  // 无限赏：不需要套数、锁箱，需要首抽五折
  [GoodsType.WuXianShang]: {
    showStock: false, showLock: false, showDailyLimit: false,
    showRage: false, showItemCard: false, showLingzhu: false,
    showLianji: false, showTimeConfig: false, showAutoXiajia: false,
    showCoupon: false, showIntegral: false, showDescription: false,
    showQuanjuXiangou: false, showShowIs: false, showUnlockAmount: true,
    showCoverImage: true, showDetailImage: true, showBannerImage: false,
    showPrice: true, showShouZhe: true,
  },
  // 商城赏：套数、盒子描述、详情图、Banner图
  [GoodsType.ShangChengShang]: {
    showStock: true, showLock: false, showDailyLimit: false,
    showRage: false, showItemCard: false, showLingzhu: false,
    showLianji: false, showTimeConfig: false, showAutoXiajia: false,
    showCoupon: false, showIntegral: false, showDescription: true,
    showQuanjuXiangou: false, showShowIs: false, showUnlockAmount: true,
    showCoverImage: true, showDetailImage: true, showBannerImage: true,
    showPrice: true, showShouZhe: false,
  },
  // 福利屋：时间配置、盒子描述，不需要封面图、详情图、价格、首抽五折
  [GoodsType.FuLiWu]: {
    showStock: false, showLock: false, showDailyLimit: false,
    showRage: false, showItemCard: false, showLingzhu: false,
    showLianji: false, showTimeConfig: true, showAutoXiajia: false,
    showCoupon: false, showIntegral: false, showDescription: true,
    showQuanjuXiangou: false, showShowIs: false, showUnlockAmount: false,
    showCoverImage: false, showDetailImage: false, showBannerImage: false,
    showPrice: false, showShouZhe: false,
  },
}

// ==================== 奖品列表动态列配置 ====================

/**
 * 奖品列表动态列配置
 * 根据盒子类型决定显示哪些列
 */
export interface PrizeColumnConfig {
  showQuantity: boolean      // 显示数量列
  showProbability: boolean   // 显示概率列
  showGiftMultiple: boolean  // 显示赠送倍率列
  showIsLingzhu: boolean     // 显示是否领主列
}

/**
 * 获取奖品列表的动态列配置
 */
export function getPrizeColumnConfig(goodsType: number): PrizeColumnConfig {
  // 显示数量列的类型：一番赏、商城赏、福利屋
  const showQuantityTypes = [1, 10, 15]
  // 显示概率列的类型：无限赏
  const showProbabilityTypes = [2]
  // 显示赠送倍率的类型：暂无
  const showGiftMultipleTypes: number[] = []
  // 显示是否领主的类型：暂无
  const showIsLingzhuTypes: number[] = []

  return {
    showQuantity: showQuantityTypes.includes(goodsType),
    showProbability: showProbabilityTypes.includes(goodsType),
    showGiftMultiple: showGiftMultipleTypes.includes(goodsType),
    showIsLingzhu: showIsLingzhuTypes.includes(goodsType),
  }
}

// ==================== 工具函数 ====================

/**
 * 获取盒子类型的字段配置
 */
export function getFieldConfig(type: number): GoodsTypeFieldConfig {
  return GoodsTypeFieldConfigs[type] || defaultFieldConfig
}

/**
 * 获取盒子类型名称
 */
export function getGoodsTypeName(type: number): string {
  return GoodsTypeLabels[type] || '未知类型'
}

/**
 * 获取奖品分类名称
 */
export function getPrizeCategoryName(category: number): string {
  return PrizeCategoryLabels[category] || '未知分类'
}

/**
 * 判断盒子类型是否使用概率模式（而非数量模式）
 */
export function isProbabilityMode(goodsType: number): boolean {
  // 无限赏使用概率模式
  return [2].includes(goodsType)
}

/**
 * 判断盒子类型是否支持宝箱奖品
 */
export function supportsTreasureBox(goodsType: number): boolean {
  // 一番赏支持宝箱
  return [1].includes(goodsType)
}
