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

/** 文档状态。 */
export type DocumentStatus = 'draft' | 'published' | 'reviewed' | 'rejected'
/** 文档类型。 */
export type DocumentType = 'common' | 'guide' | 'solution' | 'troubleshoot' | 'process' | 'technical'
/** 文档列表范围。 */
export type DocumentScope = 'my' | 'all'

/** 文档资源。 */
export interface Document {
  id: number
  created_at: string
  updated_at: string
  doc_no: string
  title: string
  description: string
  content: string
  type: DocumentType
  status: DocumentStatus
  category_id: number
  sub_category: string
  author_id: number
  author_name: string
  reviewer_id: number
  reviewer_name: string
  reviewed_at: string | null
  published_at: string | null
  publisher_id: number
  view_count: number
  like_count: number
  comment_count: number
  download_count: number
  version: string
  version_notes: string
  tags: string
  attachments: string
  related_docs: string
  detection_point_ids: string
  metadata: string
  keywords: string
  remarks: string
  is_favorited: boolean
}

/** 文档分页结果。 */
export interface DocumentPage {
  total: number
  page: number
  page_size: number
  data: Document[]
}

/** 文档创建字段。 */
export interface CreateDocumentParams {
  title: string
  description: string
  content: string
  type: DocumentType
  category_id: number
  sub_category: string
  keywords: string
  tags: string
  detection_point_ids: string
  remarks: string
}

/** 文档编辑字段。 */
export interface UpdateDocumentParams extends CreateDocumentParams {
  id: number
}

/** 文档列表参数。 */
export interface FetchDocumentListParams {
  page?: number
  page_size?: number
  scope?: DocumentScope
  keyword?: string
  type?: DocumentType
  status?: DocumentStatus
  category_id?: number
}

export const documentTypeOptions: Array<{ label: string; value: DocumentType }> = [
  { label: '通用文档', value: 'common' },
  { label: '操作指南', value: 'guide' },
  { label: '解决方案', value: 'solution' },
  { label: '故障排查', value: 'troubleshoot' },
  { label: '流程规范', value: 'process' },
  { label: '技术文档', value: 'technical' },
]

/** 创建文档草稿。 */
export const createDocument = (data: CreateDocumentParams) => request.post<KbReply<Document>>('/Kb/v1/document/create', data)

/** 更新文档。 */
export const updateDocument = (data: UpdateDocumentParams) => request.post<KbReply<Document>>('/Kb/v1/document/update', data)

/** 删除文档并移入回收站。 */
export const deleteDocument = (id: number) => request.delete<KbReply<string>>(`/Kb/v1/document/${id}`)

/** 获取文档详情。 */
export const fetchDocumentDetail = (id: number) => request.get<KbReply<Document>>(`/Kb/v1/document/${id}`)

/** 获取指定可见范围的文档列表。 */
export const fetchDocumentList = (params: FetchDocumentListParams) => request.get<KbReply<DocumentPage>>('/Kb/v1/document/list', { params })

/** 提交文档审核。 */
export const publishDocument = (id: number) => request.post<KbReply<string>>('/Kb/v1/document/publish', { id })

/** 收藏文档。 */
export const favoriteDocument = (id: number) =>
  request.post<KbReply<unknown>>('/Kb/v1/favorite/collect', { resource_type: 'document', resource_id: id })

/** 取消收藏文档。 */
export const unfavoriteDocument = (id: number) =>
  request.post<KbReply<string>>('/Kb/v1/favorite/uncollect', { resource_type: 'document', resource_id: id })
