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

// ==================== 用户排行榜类型枚举 ====================

/** 用户排行榜类型枚举 */
export enum UserRankType {
  Invite = 'invite',     // 邀请新人
  // Loss = 'loss',      // 亏损补贴 - 已隐藏，功能暂不使用
  DadaCoin = 'dada',     // 达达券
  Diamond = 'diamond',   // 钻石
  UUCoin = 'uu'          // UU币
}

/** 用户排行榜类型标签映射 */
export const UserRankTypeLabels: Record<string, string> = {
  [UserRankType.Invite]: '邀请新人',
  // [UserRankType.Loss]: '亏损补贴',  // 已隐藏
  [UserRankType.DadaCoin]: '哈尼券',
  [UserRankType.Diamond]: '钻石',
  [UserRankType.UUCoin]: 'HH币',
}

// ==================== 排行榜奖品相关类型定义 ====================

/** 排行榜奖品列表查询参数 */
export interface RankPrizeListRequest {
  page: number
  pageSize: number
  keyword?: string
}

/** 排行榜奖品响应 */
export interface RankPrizeResponse {
  id: number
  rank: number
  title: string
  imgUrl: string
  price: number
  costPrice: number
  prizeTypeId: number
  prizeTypeName: string
  createdAt?: string
}

/** 创建排行榜奖品请求 */
export interface RankPrizeCreateRequest {
  rank: number
  title: string
  imgUrl: string
  price: number
  costPrice: number
  prizeTypeId: number
}

/** 更新排行榜奖品请求 */
export interface RankPrizeUpdateRequest extends RankPrizeCreateRequest {}

// ==================== 排行榜中奖记录相关类型定义 ====================

/** 排行榜中奖记录列表查询参数 */
export interface RankLogListRequest {
  page: number
  pageSize: number
  userId?: number
  mobile?: string
}

/** 排行榜中奖记录响应 */
export interface RankLogResponse {
  id: number
  userId: number
  uid: string
  nickname: string
  headImg: string
  mobile: string
  rank: number
  prizeTitle: string
  prizeImgUrl: string
  consumeAmount: number
  timeRange: string
  createdAt: string
}

// ==================== 用户排行榜相关类型定义 ====================

/** 用户排行榜查询参数 */
export interface UserRankListRequest {
  page: number
  pageSize: number
  type: string
}

/** 用户排行榜响应 */
export interface UserRankResponse {
  rank: number
  userId: number
  uid: string
  nickname: string
  headImg: string
  value: number
  unit: string
  // 亏损排行榜特有字段
  consumeAmount?: number
  dadaCoinAmount?: number
  shipAmount?: number
  lossRate?: number
}

// ==================== 奖品类型相关类型定义 ====================

/** 奖品类型响应 */
export interface PrizeTypeResponse {
  id: number
  title: string
  sort: number
}

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

const RANK_BASE_URL = '/admin/business/rank'

// ==================== 周榜奖品 API ====================

/**
 * 获取周榜奖品列表
 * @param params 查询参数
 * @returns 分页周榜奖品列表
 */
export function getWeekPrizes(params: RankPrizeListRequest): Promise<ApiResponse<PagedResult<RankPrizeResponse>>> {
  return request({
    url: `${RANK_BASE_URL}/week`,
    method: 'get',
    params
  })
}

/**
 * 获取周榜奖品详情
 * @param id 奖品ID
 * @returns 奖品详情
 */
export function getWeekPrizeById(id: number): Promise<ApiResponse<RankPrizeResponse>> {
  return request({
    url: `${RANK_BASE_URL}/week/${id}`,
    method: 'get'
  })
}

/**
 * 创建周榜奖品
 * @param data 创建请求数据
 * @returns 新奖品ID
 */
export function createWeekPrize(data: RankPrizeCreateRequest): Promise<ApiResponse<{ id: number }>> {
  return request({
    url: `${RANK_BASE_URL}/week`,
    method: 'post',
    data
  })
}

/**
 * 更新周榜奖品
 * @param id 奖品ID
 * @param data 更新请求数据
 * @returns 操作结果
 */
export function updateWeekPrize(id: number, data: RankPrizeUpdateRequest): Promise<ApiResponse<string>> {
  return request({
    url: `${RANK_BASE_URL}/week/${id}`,
    method: 'put',
    data
  })
}

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

// ==================== 周榜中奖记录 API ====================

/**
 * 获取周榜中奖记录列表
 * @param params 查询参数
 * @returns 分页周榜中奖记录列表
 */
export function getWeekLogs(params: RankLogListRequest): Promise<ApiResponse<PagedResult<RankLogResponse>>> {
  return request({
    url: `${RANK_BASE_URL}/week/log`,
    method: 'get',
    params
  })
}

// ==================== 月榜奖品 API ====================

/**
 * 获取月榜奖品列表
 * @param params 查询参数
 * @returns 分页月榜奖品列表
 */
export function getMonthPrizes(params: RankPrizeListRequest): Promise<ApiResponse<PagedResult<RankPrizeResponse>>> {
  return request({
    url: `${RANK_BASE_URL}/month`,
    method: 'get',
    params
  })
}

/**
 * 获取月榜奖品详情
 * @param id 奖品ID
 * @returns 奖品详情
 */
export function getMonthPrizeById(id: number): Promise<ApiResponse<RankPrizeResponse>> {
  return request({
    url: `${RANK_BASE_URL}/month/${id}`,
    method: 'get'
  })
}

/**
 * 创建月榜奖品
 * @param data 创建请求数据
 * @returns 新奖品ID
 */
export function createMonthPrize(data: RankPrizeCreateRequest): Promise<ApiResponse<{ id: number }>> {
  return request({
    url: `${RANK_BASE_URL}/month`,
    method: 'post',
    data
  })
}

/**
 * 更新月榜奖品
 * @param id 奖品ID
 * @param data 更新请求数据
 * @returns 操作结果
 */
export function updateMonthPrize(id: number, data: RankPrizeUpdateRequest): Promise<ApiResponse<string>> {
  return request({
    url: `${RANK_BASE_URL}/month/${id}`,
    method: 'put',
    data
  })
}

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

// ==================== 月榜中奖记录 API ====================

/**
 * 获取月榜中奖记录列表
 * @param params 查询参数
 * @returns 分页月榜中奖记录列表
 */
export function getMonthLogs(params: RankLogListRequest): Promise<ApiResponse<PagedResult<RankLogResponse>>> {
  return request({
    url: `${RANK_BASE_URL}/month/log`,
    method: 'get',
    params
  })
}

// ==================== 用户排行榜 API ====================

/**
 * 获取用户排行榜列表
 * @param params 查询参数
 * @returns 分页用户排行榜列表
 */
export function getUserRanks(params: UserRankListRequest): Promise<ApiResponse<PagedResult<UserRankResponse>>> {
  return request({
    url: `${RANK_BASE_URL}/user`,
    method: 'get',
    params
  })
}


// ==================== 奖品类型 API ====================

/**
 * 获取奖品类型列表
 * @returns 奖品类型列表
 */
export function getPrizeTypes(): Promise<ApiResponse<PrizeTypeResponse[]>> {
  return request({
    url: `${RANK_BASE_URL}/prize-types`,
    method: 'get'
  })
}
