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

// ==================== 任务类型枚举 ====================

/** 任务类型枚举 */
export enum TaskType {
  /** 每日任务 */
  Daily = 1,
  /** 每周任务 */
  Weekly = 2
}

/** 任务类型标签映射 */
export const TaskTypeLabels: Record<number, string> = {
  [TaskType.Daily]: '每日任务',
  [TaskType.Weekly]: '每周任务'
}

// ==================== 任务类型定义 ====================

/** 任务列表查询请求 */
export interface TaskListRequest {
  /** 页码 */
  page: number
  /** 每页数量 */
  pageSize: number
  /** 关键词搜索（搜索标题） */
  keyword?: string
  /** 任务类型筛选：1-每日任务 2-每周任务 */
  type?: number
}

/** 任务响应 */
export interface TaskResponse {
  /** 主键ID */
  id: number
  /** 任务标题 */
  title: string
  /** 任务类型：1-每日任务 2-每周任务 */
  type: number
  /** 任务类型名称 */
  typeName: string
  /** 任务分类 */
  cate: number
  /** 是否重要任务 */
  isImportant?: number
  /** 完成次数要求 */
  number?: number
  /** 奖励数量（欧气值） */
  zNumber?: number
  /** 排序 */
  sort?: number
  /** 创建时间 */
  createdAt: string
  /** 更新时间 */
  updatedAt: string
}

/** 任务创建请求 */
export interface TaskCreateRequest {
  /** 任务标题 */
  title: string
  /** 任务类型：1-每日任务 2-每周任务 */
  type: number
  /** 任务分类 */
  cate: number
  /** 是否重要任务 */
  isImportant?: number
  /** 完成次数要求 */
  number: number
  /** 奖励数量（欧气值） */
  zNumber: number
  /** 排序 */
  sort?: number
}

/** 任务更新请求 */
export interface TaskUpdateRequest {
  /** 任务标题 */
  title: string
  /** 任务类型：1-每日任务 2-每周任务 */
  type: number
  /** 任务分类 */
  cate: number
  /** 是否重要任务 */
  isImportant?: number
  /** 完成次数要求 */
  number: number
  /** 奖励数量（欧气值） */
  zNumber: number
  /** 排序 */
  sort?: number
}

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

const TASK_BASE_URL = '/admin/business/task'

// ==================== 任务管理 API ====================

/**
 * 获取任务列表（分页）
 * @param params 查询参数
 * @returns 分页任务列表
 */
export function getTasks(params: TaskListRequest): Promise<ApiResponse<PagedResult<TaskResponse>>> {
  return request({
    url: TASK_BASE_URL,
    method: 'get',
    params
  })
}

/**
 * 获取任务详情
 * @param id 任务ID
 * @returns 任务详情
 */
export function getTaskById(id: number): Promise<ApiResponse<TaskResponse>> {
  return request({
    url: `${TASK_BASE_URL}/${id}`,
    method: 'get'
  })
}

/**
 * 创建任务
 * @param data 创建请求数据
 * @returns 新任务ID
 */
export function createTask(data: TaskCreateRequest): Promise<ApiResponse<{ id: number }>> {
  return request({
    url: TASK_BASE_URL,
    method: 'post',
    data
  })
}

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

/**
 * 删除任务（软删除）
 * @param id 任务ID
 * @returns 操作结果
 */
export function deleteTask(id: number): Promise<ApiResponse<string>> {
  return request({
    url: `${TASK_BASE_URL}/${id}`,
    method: 'delete'
  })
}
