import { ref } from 'vue'
import { useApi, type ApiResponse } from './useApi'

export interface CustomFieldValue {
  id: string
  customFieldId: string
  entityType: string
  entityId: string
  value: unknown
  [key: string]: unknown
}

export function useCustomFields() {
  const { apiCall } = useApi()
  const customFieldValues = ref<CustomFieldValue[]>([])
  const loading = ref(false)

  // Créer une valeur de champ personnalisé
  const createCustomFieldValue = async (customFieldValueData: Record<string, unknown>): Promise<ApiResponse> => {
    try {
      const result = await apiCall('/custom-fields/values', {
        method: 'POST',
        body: JSON.stringify(customFieldValueData),
      })
      return result
    } catch (error) {
      console.error('Erreur lors de la création de la valeur de champ personnalisé:', error)
      return { success: false, error: (error as Error).message }
    }
  }

  // Obtenir les valeurs de champs personnalisés pour une entité
  const getCustomFieldValuesByEntity = async (entityType: string, entityId: string): Promise<ApiResponse> => {
    try {
      loading.value = true
      const result = await apiCall(`/custom-fields/values/${entityType}/${entityId}`, {
        method: 'GET',
      })
      if (result.success) {
        customFieldValues.value = result.data as CustomFieldValue[]
      }
      return result
    } catch (error) {
      console.error('Erreur lors de la récupération des valeurs de champs personnalisés:', error)
      return { success: false, error: (error as Error).message }
    } finally {
      loading.value = false
    }
  }

  // Mettre à jour une valeur de champ personnalisé
  const updateCustomFieldValue = async (id: string, updateData: Record<string, unknown>): Promise<ApiResponse> => {
    try {
      const result = await apiCall(`/custom-fields/values/${id}`, {
        method: 'PATCH',
        body: JSON.stringify(updateData),
      })
      return result
    } catch (error) {
      console.error('Erreur lors de la mise à jour de la valeur de champ personnalisé:', error)
      return { success: false, error: (error as Error).message }
    }
  }

  // Créer ou mettre à jour une valeur de champ personnalisé
  const upsertCustomFieldValue = async (
    customFieldId: string | null,
    entityType: string,
    entityId: string,
    value: unknown,
    metadata: Record<string, unknown> = {},
  ): Promise<ApiResponse> => {
    try {
      const result = await apiCall('/custom-fields/values/upsert', {
        method: 'POST',
        body: JSON.stringify({
          customFieldId,
          entityType,
          entityId,
          value,
          ...metadata,
        }),
      })
      return result
    } catch (error) {
      console.error('Erreur lors de la création/mise à jour de la valeur de champ personnalisé:', error)
      return { success: false, error: (error as Error).message }
    }
  }

  // Supprimer une valeur de champ personnalisé
  const deleteCustomFieldValue = async (id: string): Promise<ApiResponse> => {
    try {
      const result = await apiCall(`/custom-fields/values/${id}`, {
        method: 'DELETE',
      })
      return result
    } catch (error) {
      console.error('Erreur lors de la suppression de la valeur de champ personnalisé:', error)
      return { success: false, error: (error as Error).message }
    }
  }

  return {
    customFieldValues,
    loading,
    createCustomFieldValue,
    getCustomFieldValuesByEntity,
    updateCustomFieldValue,
    upsertCustomFieldValue,
    deleteCustomFieldValue,
  }
}
