import { useMutation } from '@tanstack/react-query'
import { offerService } from '../services/offerService'
import type { AssetType } from '../domain/enums'
import { useToastStore } from '../stores/toastStore'

export function useCreateOfferDraft() {
  return useMutation({
    mutationFn: (input: {
      needId: string
      selectedPropertyIds: string[]
      needTitle: string
      location: string
      assetType: AssetType
      sizeRange: { min: number; max: number }
    }) =>
      offerService.createOfferDraft(
        input.needId,
        input.selectedPropertyIds,
        input.needTitle,
        input.location,
        input.assetType,
        input.sizeRange,
      ),
    onError: () => {
      useToastStore.getState().showToast('Angebot konnte nicht erstellt werden.', 'error')
    },
  })
}

export function useUpdateOfferField() {
  return useMutation({
    mutationFn: (input: { offerDraftId: string; fieldId: string; value: string }) =>
      offerService.updateOfferField(input.offerDraftId, input.fieldId, input.value),
    onError: () => {
      useToastStore.getState().showToast('Feld konnte nicht gespeichert werden.', 'error')
    },
  })
}

export function useMarkOfferChecked() {
  return useMutation({
    mutationFn: (offerDraftId: string) => offerService.markOfferChecked(offerDraftId),
    onError: () => {
      useToastStore.getState().showToast('Prüfung konnte nicht gespeichert werden.', 'error')
    },
  })
}

export function useGeneratePdfPreview() {
  return useMutation({
    mutationFn: (offerDraftId: string) => offerService.generatePdfPreview(offerDraftId),
    onError: () => {
      useToastStore.getState().showToast('PDF-Vorschau konnte nicht generiert werden.', 'error')
    },
  })
}

export function useSendOffer() {
  return useMutation({
    mutationFn: (offerDraftId: string) => offerService.sendOffer(offerDraftId),
    onError: () => {
      useToastStore.getState().showToast('Angebot konnte nicht gesendet werden. Bitte versuchen Sie es erneut.', 'error')
    },
  })
}
