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

// ==================== 优惠券类型枚举 ====================

/** 优惠券类型枚举 */
export enum CouponType {
  NewUser = 1,       // 新人优惠券
  Equity = 2,        // 权益优惠券
  FullReduction = 3  // 满减优惠券
}

/** 优惠券类型标签映射 */
export const CouponTypeLabels: Record<number, string> = {
  [CouponType.NewUser]: '新人优惠券',
  [CouponType.Equity]: '权益优惠券',
  [CouponType.FullReduction]: '满减优惠券',
}

/** 优惠券使用限制枚举 */
export enum CouponUseLimit {
  NoLimit = 0,      // 不限制
  YiFanShang = 1,   // 一番赏
  WuXianShang = 2,  // 无限赏
  LeiTaiShang = 3,  // 擂台赏
  QuanJuShang = 4,  // 全局赏
  LingZhuShang = 5, // 领主赏
  LianJiShang = 6   // 连击赏
}

/** 优惠券使用限制标签映射 */
export const CouponUseLimitLabels: Record<number, string> = {
  [CouponUseLimit.NoLimit]: '不限制',
  [CouponUseLimit.YiFanShang]: '一番赏',
  [CouponUseLimit.WuXianShang]: '无限赏',
  [CouponUseLimit.LeiTaiShang]: '擂台赏',
  [CouponUseLimit.QuanJuShang]: '全局赏',
  [CouponUseLimit.LingZhuShang]: '领主赏',
  [CouponUseLimit.LianJiShang]: '连击赏',
}

/** 优惠券领取状态枚举 */
export enum CouponReceiveStatus {
  Unused = 0,   // 未使用
  Used = 1,     // 已使用
  Expired = 2   // 已过期
}

/** 优惠券领取状态标签映射 */
export const CouponReceiveStatusLabels: Record<number, string> = {
  [CouponReceiveStatus.Unused]: '未使用',
  [CouponReceiveStatus.Used]: '已使用',
  [CouponReceiveStatus.Expired]: '已过期',
}

/** 优惠券状态枚举（模板状态） */
export enum CouponStatus {
  Enabled = 0,   // 启用
  Disabled = 1   // 禁用
}

/** 优惠券状态标签映射 */
export const CouponStatusLabels: Record<number, string> = {
  [CouponStatus.Enabled]: '启用',
  [CouponStatus.Disabled]: '禁用',
}

// ==================== 优惠券相关类型定义 ====================

/** 优惠券列表查询参数 */
export interface CouponListRequest {
  page: number
  pageSize: number
  keyword?: string
  type?: number
}

/** 优惠券响应 */
export interface CouponResponse {
  id: number
  title: string
  minPrice: number
  discountPrice: number
  validDays: number
  type: number
  typeName: string
  useLimit: number
  useLimitName: string
  status: number
  createdAt: string
}

/** 创建优惠券请求 */
export interface CouponCreateRequest {
  title: string
  minPrice: number
  discountPrice: number
  validDays: number
  type: number
  useLimit: number
}

/** 更新优惠券请求 */
export interface CouponUpdateRequest extends CouponCreateRequest {}

// ==================== 优惠券领取记录相关类型定义 ====================

/** 优惠券领取记录列表查询参数 */
export interface CouponReceiveListRequest {
  page: number
  pageSize: number
  userId?: number
  title?: string
  status?: number
}

/** 优惠券领取记录响应 */
export interface CouponReceiveResponse {
  id: number
  userId: number
  uid: string
  nickname: string
  couponTitle: string
  minPrice: number
  discountPrice: number
  status: number
  statusName: string
  expireTime?: string
  createdAt: string
}

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

const COUPON_BASE_URL = '/admin/business/coupon'

// ==================== 优惠券 API ====================

/**
 * 获取优惠券列表
 * @param params 查询参数
 * @returns 分页优惠券列表
 */
export function getCoupons(params: CouponListRequest): Promise<ApiResponse<PagedResult<CouponResponse>>> {
  return request({
    url: COUPON_BASE_URL,
    method: 'get',
    params
  })
}

/**
 * 获取优惠券详情
 * @param id 优惠券ID
 * @returns 优惠券详情
 */
export function getCouponById(id: number): Promise<ApiResponse<CouponResponse>> {
  return request({
    url: `${COUPON_BASE_URL}/${id}`,
    method: 'get'
  })
}

/**
 * 创建优惠券
 * @param data 创建请求数据
 * @returns 新优惠券ID
 */
export function createCoupon(data: CouponCreateRequest): Promise<ApiResponse<{ id: number }>> {
  return request({
    url: COUPON_BASE_URL,
    method: 'post',
    data
  })
}

/**
 * 更新优惠券
 * @param id 优惠券ID
 * @param data 更新请求数据
 * @returns 操作结果
 */
export function updateCoupon(id: number, data: CouponUpdateRequest): Promise<ApiResponse<string>> {
  return request({
    url: `${COUPON_BASE_URL}/${id}`,
    method: 'put',
    data
  })
}

/**
 * 删除优惠券
 * @param id 优惠券ID
 * @returns 操作结果
 */
export function deleteCoupon(id: number): Promise<ApiResponse<string>> {
  return request({
    url: `${COUPON_BASE_URL}/${id}`,
    method: 'delete'
  })
}

/**
 * 修改优惠券状态
 * @param id 优惠券ID
 * @param status 状态：0-启用 其他-禁用
 * @returns 操作结果
 */
export function updateCouponStatus(id: number, status: number): Promise<ApiResponse<string>> {
  return request({
    url: `${COUPON_BASE_URL}/${id}/status`,
    method: 'put',
    params: { status }
  })
}

// ==================== 优惠券领取记录 API ====================

/**
 * 获取优惠券领取记录列表
 * @param params 查询参数
 * @returns 分页领取记录列表
 */
export function getCouponReceives(params: CouponReceiveListRequest): Promise<ApiResponse<PagedResult<CouponReceiveResponse>>> {
  return request({
    url: `${COUPON_BASE_URL}/receive`,
    method: 'get',
    params
  })
}
