import { request, type ApiResponse, type PagedResult } from '@/utils/request'

// ==================== 钻石商品状态枚举 ====================

/** 钻石商品状态枚举 */
export enum DiamondProductStatus {
  Disabled = 0,  // 禁用
  Enabled = 1    // 启用
}

/** 钻石商品状态标签映射 */
export const DiamondProductStatusLabels: Record<number, string> = {
  [DiamondProductStatus.Disabled]: '禁用',
  [DiamondProductStatus.Enabled]: '启用',
}

/** 是否首充枚举 */
export enum IsFirstCharge {
  No = 0,   // 否
  Yes = 1   // 是
}

/** 是否首充标签映射 */
export const IsFirstChargeLabels: Record<number, string> = {
  [IsFirstCharge.No]: '否',
  [IsFirstCharge.Yes]: '是',
}

// ==================== 钻石商品相关类型定义 ====================

/** 钻石商品列表查询参数 */
export interface DiamondProductListRequest {
  page: number
  pageSize: number
  name?: string
  status?: number
}

/** 钻石商品响应 */
export interface DiamondProductResponse {
  id: number
  name: string
  productsId: string
  productsType: string
  baseReward: string
  price: number
  isFirst: number
  firstBonusReward?: string
  firstChargeImage?: string
  firstSelectChargeImage?: string
  normalImage?: string
  normalSelectImage?: string
  sortOrder: number
  status: number
  createdAt?: string
  updatedAt?: string
}

/** 创建钻石商品请求 */
export interface DiamondProductCreateRequest {
  name: string
  productsId: string
  productsType: string
  baseReward: string
  price: number
  isFirst: number
  firstBonusReward?: string
  firstChargeImage?: string
  firstSelectChargeImage?: string
  normalImage?: string
  normalSelectImage?: string
  sortOrder: number
  status: number
}

/** 更新钻石商品请求 */
export interface DiamondProductUpdateRequest extends DiamondProductCreateRequest {}

/** 钻石商品状态更新请求 */
export interface DiamondProductStatusRequest {
  status: number
}

/** 最大排序值响应 */
export interface DiamondMaxSortResponse {
  maxSort: number
}

// ==================== 赠送货币配置类型 ====================

/** 赠送货币配置项 */
export interface RewardConfigItem {
  type: string      // 货币类型：diamond/integral/score等
  amount: number    // 数量
}

// ==================== API 基础路径 ====================

const DIAMOND_BASE_URL = '/admin/business/diamond'

// ==================== 钻石商品 API ====================

/**
 * 获取钻石商品列表
 * @param params 查询参数
 * @returns 分页钻石商品列表
 */
export function getDiamondProducts(params: DiamondProductListRequest): Promise<ApiResponse<PagedResult<DiamondProductResponse>>> {
  return request({
    url: DIAMOND_BASE_URL,
    method: 'get',
    params
  })
}

/**
 * 获取钻石商品详情
 * @param id 商品ID
 * @returns 商品详情
 */
export function getDiamondProductById(id: number): Promise<ApiResponse<DiamondProductResponse>> {
  return request({
    url: `${DIAMOND_BASE_URL}/${id}`,
    method: 'get'
  })
}

/**
 * 创建钻石商品
 * @param data 创建请求数据
 * @returns 新商品ID
 */
export function createDiamondProduct(data: DiamondProductCreateRequest): Promise<ApiResponse<{ id: number }>> {
  return request({
    url: DIAMOND_BASE_URL,
    method: 'post',
    data
  })
}

/**
 * 更新钻石商品
 * @param id 商品ID
 * @param data 更新请求数据
 * @returns 操作结果
 */
export function updateDiamondProduct(id: number, data: DiamondProductUpdateRequest): Promise<ApiResponse<string>> {
  return request({
    url: `${DIAMOND_BASE_URL}/${id}`,
    method: 'put',
    data
  })
}

/**
 * 删除钻石商品
 * @param id 商品ID
 * @returns 操作结果
 */
export function deleteDiamondProduct(id: number): Promise<ApiResponse<string>> {
  return request({
    url: `${DIAMOND_BASE_URL}/${id}`,
    method: 'delete'
  })
}

/**
 * 更新钻石商品状态
 * @param id 商品ID
 * @param status 状态值（0-禁用 1-启用）
 * @returns 操作结果
 */
export function updateDiamondProductStatus(id: number, status: number): Promise<ApiResponse<string>> {
  return request({
    url: `${DIAMOND_BASE_URL}/${id}/status`,
    method: 'put',
    data: { status }
  })
}

/**
 * 获取最大排序值
 * @returns 最大排序值
 */
export function getDiamondMaxSort(): Promise<ApiResponse<DiamondMaxSortResponse>> {
  return request({
    url: `${DIAMOND_BASE_URL}/max-sort`,
    method: 'get'
  })
}
