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

// ==================== 奖励类型枚举 ====================

/** 奖励类型枚举 */
export enum RewardType {
  /** 钻石 */
  Diamond = 1,
  /** UU币 */
  UUCoin = 2,
  /** 达达卷 */
  DaDaCoin = 3,
  /** 优惠券 */
  Coupon = 4
}

/** 奖励类型标签映射 */
export const RewardTypeLabels: Record<number, string> = {
  [RewardType.Diamond]: '钻石',
  [RewardType.UUCoin]: 'HH币',
  [RewardType.DaDaCoin]: '哈尼券',
  [RewardType.Coupon]: '优惠券'
}

// ==================== 奖励类型定义 ====================

/** 优惠券信息（用于奖励关联） */
export interface CouponInfo {
  /** 优惠券ID */
  id: number
  /** 优惠券标题 */
  title: string
  /** 优惠金额 */
  price?: number
  /** 满减门槛金额 */
  manPrice?: number
  /** 有效天数 */
  effectiveDay?: number
}

/** 奖励列表查询请求 */
export interface RewardListRequest {
  /** 页码 */
  page: number
  /** 每页数量 */
  pageSize: number
  /** 奖励类型筛选：1-钻石 2-UU币 3-达达卷 4-优惠券 */
  rewardType?: number
  /** 关键词搜索（搜索描述） */
  keyword?: string
  /** 奖励ID筛选（业务标识） */
  rewardId?: string
}

/** 奖励响应 */
export interface RewardResponse {
  /** 主键ID */
  id: number
  /** 奖励ID（业务标识） */
  rewardId: string
  /** 奖励类型：1-钻石 2-UU币 3-达达卷 4-优惠券 */
  rewardType: number
  /** 奖励类型名称 */
  rewardTypeName: string
  /** 奖励扩展参数（如优惠券ID） */
  rewardExtend?: number
  /** 奖励数值 */
  rewardValue: number
  /** 描述 */
  description?: string
  /** 创建时间 */
  createdAt?: string
  /** 更新时间 */
  updatedAt?: string
  /** 关联的优惠券信息（当类型为优惠券时） */
  coupon?: CouponInfo
}

/** 奖励创建请求 */
export interface RewardCreateRequest {
  /** 奖励ID（业务标识，可选，不传则自动生成） */
  rewardId?: string
  /** 奖励类型：1-钻石 2-UU币 3-达达卷 4-优惠券 */
  rewardType: number
  /** 奖励扩展参数（优惠券ID，当类型为优惠券时必填） */
  rewardExtend?: number
  /** 奖励数值（非优惠券类型时必填） */
  rewardValue: number
  /** 描述 */
  description?: string
}

/** 奖励更新请求 */
export interface RewardUpdateRequest {
  /** 奖励类型：1-钻石 2-UU币 3-达达卷 4-优惠券 */
  rewardType: number
  /** 奖励扩展参数（优惠券ID，当类型为优惠券时必填） */
  rewardExtend?: number
  /** 奖励数值（非优惠券类型时必填） */
  rewardValue: number
  /** 描述 */
  description?: string
}

/** 奖励项（用于批量操作） */
export interface RewardItem {
  /** 奖励类型：1-钻石 2-UU币 3-达达卷 4-优惠券 */
  rewardType: number
  /** 奖励扩展参数（优惠券ID） */
  rewardExtend?: number
  /** 奖励数值 */
  rewardValue: number
  /** 描述 */
  description?: string
}

/** 批量更新奖励请求 */
export interface RewardBatchRequest {
  /** 奖励ID（业务标识） */
  rewardId: string
  /** 奖励ID前缀（用于生成新的奖励ID） */
  rewardIdPrefix?: string
  /** 奖励列表 */
  rewards: RewardItem[]
}

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

const REWARD_BASE_URL = '/admin/business/reward'

// ==================== 奖励管理 API ====================

/**
 * 获取奖励列表（分页）
 * @param params 查询参数
 * @returns 分页奖励列表
 */
export function getRewards(params: RewardListRequest): Promise<ApiResponse<PagedResult<RewardResponse>>> {
  return request({
    url: REWARD_BASE_URL,
    method: 'get',
    params
  })
}

/**
 * 获取奖励详情
 * @param id 奖励ID
 * @returns 奖励详情
 */
export function getRewardById(id: number): Promise<ApiResponse<RewardResponse>> {
  return request({
    url: `${REWARD_BASE_URL}/${id}`,
    method: 'get'
  })
}

/**
 * 创建奖励
 * @param data 创建请求数据
 * @returns 新奖励ID
 */
export function createReward(data: RewardCreateRequest): Promise<ApiResponse<{ id: number }>> {
  return request({
    url: REWARD_BASE_URL,
    method: 'post',
    data
  })
}

/**
 * 更新奖励
 * @param id 奖励ID
 * @param data 更新请求数据
 * @returns 操作结果
 */
export function updateReward(id: number, data: RewardUpdateRequest): Promise<ApiResponse<string>> {
  return request({
    url: `${REWARD_BASE_URL}/${id}`,
    method: 'put',
    data
  })
}

/**
 * 删除奖励
 * @param id 奖励ID
 * @returns 操作结果
 */
export function deleteReward(id: number): Promise<ApiResponse<string>> {
  return request({
    url: `${REWARD_BASE_URL}/${id}`,
    method: 'delete'
  })
}

/**
 * 更新奖励状态
 * @param id 奖励ID
 * @param status 状态值
 * @returns 操作结果
 */
export function updateRewardStatus(id: number, status: number): Promise<ApiResponse<string>> {
  return request({
    url: `${REWARD_BASE_URL}/${id}/status`,
    method: 'put',
    data: { status }
  })
}

/**
 * 根据reward_id获取奖励列表
 * @param rewardId 奖励ID（业务标识）
 * @returns 奖励列表
 */
export function getRewardsByRewardId(rewardId: string): Promise<ApiResponse<RewardResponse[]>> {
  return request({
    url: `${REWARD_BASE_URL}/by-reward-id`,
    method: 'get',
    params: { rewardId }
  })
}

/**
 * 批量更新奖励
 * @param data 批量更新请求数据
 * @returns 操作结果
 */
export function batchUpdateRewards(data: RewardBatchRequest): Promise<ApiResponse<string>> {
  return request({
    url: `${REWARD_BASE_URL}/batch`,
    method: 'post',
    data
  })
}
