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

// ==================== 权益等级奖品类型枚举 ====================

/** 权益等级奖品类型枚举 */
export enum QyLevelPrizeType {
  /** 优惠券 */
  Coupon = 1
}

/** 权益等级奖品类型标签映射 */
export const QyLevelPrizeTypeLabels: Record<number, string> = {
  [QyLevelPrizeType.Coupon]: '优惠券'
}

// ==================== 权益等级类型定义 ====================

/** 权益等级列表查询请求 */
export interface QyLevelListRequest {
  /** 页码 */
  page: number
  /** 每页数量 */
  pageSize: number
  /** 关键词搜索（搜索名称） */
  keyword?: string
}

/** 权益等级响应 */
export interface QyLevelResponse {
  /** 主键ID */
  id: number
  /** 等级 */
  level: number
  /** 等级名称 */
  title: string
  /** 所需欧气值 */
  requiredPoints: number
  /** 创建时间 */
  createdAt?: string
  /** 更新时间 */
  updatedAt?: string
}

/** 权益等级更新请求 */
export interface QyLevelUpdateRequest {
  /** 等级 */
  level: number
  /** 等级名称 */
  title: string
  /** 所需欧气值 */
  requiredPoints: number
}

// ==================== 权益等级奖品类型定义 ====================

/** 权益等级奖品列表查询请求 */
export interface QyLevelPrizeListRequest {
  /** 页码 */
  page: number
  /** 每页数量 */
  pageSize: number
  /** 奖品类型筛选：1-优惠券 2-实物奖品 */
  type?: number
  /** 关键词搜索（搜索标题） */
  keyword?: string
}

/** 权益等级奖品响应 */
export interface QyLevelPrizeResponse {
  /** 主键ID */
  id: number
  /** 权益等级ID */
  qyLevelId: number
  /** 权益等级 */
  qyLevel: number
  /** 奖品类型：1-优惠券 2-实物奖品 */
  type: number
  /** 奖品类型名称 */
  typeName: string
  /** 奖品标题 */
  title?: string
  /** 优惠券ID */
  couponId?: number
  /** 优惠券数量 */
  quantity?: number
  /** 奖品价值 */
  value?: number
  /** 兑换价格 */
  exchangePrice?: number
  /** 市场参考价 */
  referencePrice?: number
  /** 中奖概率（0-100） */
  probability?: number
  /** 奖品图片URL */
  image?: string
  /** 奖品编码 */
  prizeCode?: string
  /** 排序 */
  sort?: number
  /** 创建时间 */
  createdAt?: string
  /** 更新时间 */
  updatedAt?: string
  /** 关联的优惠券信息（当类型为优惠券时） */
  coupon?: CouponInfo
}

/** 权益等级奖品创建请求 */
export interface QyLevelPrizeCreateRequest {
  /** 奖品类型：1-优惠券 2-实物奖品 */
  type: number
  /** 奖品标题（实物奖品必填） */
  title?: string
  /** 优惠券ID（优惠券类型必填） */
  couponId?: number
  /** 优惠券数量（优惠券类型必填） */
  quantity?: number
  /** 奖品价值（实物奖品必填） */
  value?: number
  /** 兑换价格（实物奖品必填） */
  exchangePrice?: number
  /** 市场参考价（实物奖品必填） */
  referencePrice?: number
  /** 中奖概率（0-100，最多2位小数） */
  probability?: number
  /** 奖品图片URL（实物奖品必填） */
  image?: string
  /** 奖品等级ID */
  shangId?: number
  /** 排序 */
  sort?: number
}

/** 权益等级奖品更新请求 */
export interface QyLevelPrizeUpdateRequest {
  /** 奖品类型：1-优惠券 2-实物奖品 */
  type: number
  /** 奖品标题（实物奖品必填） */
  title?: string
  /** 优惠券ID（优惠券类型必填） */
  couponId?: number
  /** 优惠券数量（优惠券类型必填） */
  quantity?: number
  /** 奖品价值（实物奖品必填） */
  value?: number
  /** 兑换价格（实物奖品必填） */
  exchangePrice?: number
  /** 市场参考价（实物奖品必填） */
  referencePrice?: number
  /** 中奖概率（0-100，最多2位小数） */
  probability?: number
  /** 奖品图片URL（实物奖品必填） */
  image?: string
  /** 奖品等级ID */
  shangId?: number
  /** 排序 */
  sort?: number
}

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

const QYLEVEL_BASE_URL = '/admin/business/qylevel'

// ==================== 权益等级 API ====================

/**
 * 获取权益等级列表（分页）
 * @param params 查询参数
 * @returns 分页权益等级列表
 */
export function getQyLevels(params: QyLevelListRequest): Promise<ApiResponse<PagedResult<QyLevelResponse>>> {
  return request({
    url: QYLEVEL_BASE_URL,
    method: 'get',
    params
  })
}

/**
 * 获取权益等级详情
 * @param id 权益等级ID
 * @returns 权益等级详情
 */
export function getQyLevelById(id: number): Promise<ApiResponse<QyLevelResponse>> {
  return request({
    url: `${QYLEVEL_BASE_URL}/${id}`,
    method: 'get'
  })
}

/**
 * 更新权益等级
 * @param id 权益等级ID
 * @param data 更新请求数据
 * @returns 操作结果
 */
export function updateQyLevel(id: number, data: QyLevelUpdateRequest): Promise<ApiResponse<string>> {
  return request({
    url: `${QYLEVEL_BASE_URL}/${id}`,
    method: 'put',
    data
  })
}

/** 权益等级创建请求 */
export interface QyLevelCreateRequest {
  /** 等级 */
  level: number
  /** 等级名称 */
  title: string
  /** 所需欧气值 */
  requiredPoints: number
}

/**
 * 创建权益等级
 * @param data 创建请求数据
 * @returns 新权益等级ID
 */
export function createQyLevel(data: QyLevelCreateRequest): Promise<ApiResponse<{ id: number }>> {
  return request({
    url: QYLEVEL_BASE_URL,
    method: 'post',
    data
  })
}

/**
 * 删除权益等级（软删除）
 * @param id 权益等级ID
 * @returns 操作结果
 */
export function deleteQyLevel(id: number): Promise<ApiResponse<string>> {
  return request({
    url: `${QYLEVEL_BASE_URL}/${id}`,
    method: 'delete'
  })
}

// ==================== 权益等级奖品 API ====================

/**
 * 获取权益等级奖品列表（分页）
 * @param levelId 权益等级ID
 * @param params 查询参数
 * @returns 分页奖品列表
 */
export function getQyLevelPrizes(levelId: number, params: QyLevelPrizeListRequest): Promise<ApiResponse<PagedResult<QyLevelPrizeResponse>>> {
  return request({
    url: `${QYLEVEL_BASE_URL}/${levelId}/prizes`,
    method: 'get',
    params
  })
}

/**
 * 创建权益等级奖品
 * @param levelId 权益等级ID
 * @param data 创建请求数据
 * @returns 新奖品ID
 */
export function createQyLevelPrize(levelId: number, data: QyLevelPrizeCreateRequest): Promise<ApiResponse<{ id: number }>> {
  return request({
    url: `${QYLEVEL_BASE_URL}/${levelId}/prizes`,
    method: 'post',
    data
  })
}

/**
 * 更新权益等级奖品
 * @param prizeId 奖品ID
 * @param data 更新请求数据
 * @returns 操作结果
 */
export function updateQyLevelPrize(prizeId: number, data: QyLevelPrizeUpdateRequest): Promise<ApiResponse<string>> {
  return request({
    url: `${QYLEVEL_BASE_URL}/prizes/${prizeId}`,
    method: 'put',
    data
  })
}

/**
 * 删除权益等级奖品（软删除）
 * @param prizeId 奖品ID
 * @returns 操作结果
 */
export function deleteQyLevelPrize(prizeId: number): Promise<ApiResponse<string>> {
  return request({
    url: `${QYLEVEL_BASE_URL}/prizes/${prizeId}`,
    method: 'delete'
  })
}
