import { request } from '@/api/request'
import type { KbReply } from './types'

/** 公共分类状态。 */
export type CategoryStatus = 'active' | 'inactive'

/** 公共分类。 */
export interface Category {
  id: number
  created_at: string
  updated_at: string
  name: string
  description: string
  type: 'general'
  icon: string
  color: string
  parent_id: number
  level: 1 | 2 | 3
  path: string
  sort_order: number
  status: CategoryStatus
  creator_id: number
  creator_name: string
  doc_count: number
  faq_count: number
  metadata: string
  remarks: string
}

/** 公共分类树节点；详情字段需通过详情接口获取。 */
export interface CategoryTreeNode {
  id: number
  name: string
  description: string
  type: 'general'
  icon: string
  color: string
  parent_id: number
  level: 1 | 2 | 3
  path: string
  sort_order: number
  status: CategoryStatus
  doc_count: number
  faq_count: number
  children: CategoryTreeNode[]
}

/** 创建分类参数。 */
export interface CreateCategoryParams {
  name: string
  description: string
  icon: string
  color: string
  parent_id: number
  sort_order: number
  status: CategoryStatus
  remarks: string
}

/** 更新分类参数。 */
export interface UpdateCategoryParams extends CreateCategoryParams {
  id: number
}

/** 分类列表参数。 */
export interface FetchCategoryListParams {
  parent_id?: number
}

/** 创建公共分类。 */
export const createCategory = (data: CreateCategoryParams) => request.post<KbReply<Category>>('/Kb/v1/category/create', data)

/** 更新公共分类。 */
export const updateCategory = (data: UpdateCategoryParams) => request.post<KbReply<Category>>('/Kb/v1/category/update', data)

/** 删除公共分类。 */
export const deleteCategory = (id: number) => request.delete<KbReply<string>>(`/Kb/v1/category/${id}`)

/** 获取公共分类详情。 */
export const fetchCategoryDetail = (id: number) => request.get<KbReply<Category>>(`/Kb/v1/category/${id}`)

/** 获取公共分类列表。 */
export const fetchCategoryList = (params?: FetchCategoryListParams) => request.get<KbReply<Category[]>>('/Kb/v1/category/list', { params })

/** 获取完整公共分类树，包含停用节点。 */
export const fetchCategoryTree = () => request.get<KbReply<CategoryTreeNode[]>>('/Kb/v1/category/tree')
