import apiClient from '../client'
import type {
  AnnotationItem,
  CreateAnnotationRequest,
  AnnotationOverrideRequest,
} from '../types'

export const annotationsApi = {
  list: async (documentId: string): Promise<AnnotationItem[]> => {
    const { data } = await apiClient.get(
      `/api/v1/admin/documents/${documentId}/annotations`
    )
    return data.annotations
  },

  create: async (
    documentId: string,
    annotation: CreateAnnotationRequest
  ): Promise<AnnotationItem> => {
    const { data } = await apiClient.post(
      `/api/v1/admin/documents/${documentId}/annotations`,
      annotation
    )
    return data
  },

  update: async (
    documentId: string,
    annotationId: string,
    updates: Partial<CreateAnnotationRequest>
  ): Promise<AnnotationItem> => {
    const { data } = await apiClient.patch(
      `/api/v1/admin/documents/${documentId}/annotations/${annotationId}`,
      updates
    )
    return data
  },

  delete: async (documentId: string, annotationId: string): Promise<void> => {
    await apiClient.delete(
      `/api/v1/admin/documents/${documentId}/annotations/${annotationId}`
    )
  },

  verify: async (
    documentId: string,
    annotationId: string
  ): Promise<{ annotation_id: string; is_verified: boolean; message: string }> => {
    const { data } = await apiClient.post(
      `/api/v1/admin/documents/${documentId}/annotations/${annotationId}/verify`
    )
    return data
  },

  override: async (
    documentId: string,
    annotationId: string,
    overrideData: AnnotationOverrideRequest
  ): Promise<{ annotation_id: string; source: string; message: string }> => {
    const { data } = await apiClient.patch(
      `/api/v1/admin/documents/${documentId}/annotations/${annotationId}/override`,
      overrideData
    )
    return data
  },
}
