import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { notebooksApi } from '@/lib/api/notebooks' import { QUERY_KEYS } from '@/lib/api/query-client' import { useToast } from '@/lib/hooks/use-toast' import { useTranslation } from '@/lib/hooks/use-translation' import { getApiErrorKey } from '@/lib/utils/error-handler' import { CreateNotebookRequest, UpdateNotebookRequest } from '@/lib/types/api' export function useNotebooks(archived?: boolean) { return useQuery({ queryKey: [...QUERY_KEYS.notebooks, { archived }], queryFn: () => notebooksApi.list({ archived, order_by: 'updated desc' }), }) } export function useNotebook(id: string) { return useQuery({ queryKey: QUERY_KEYS.notebook(id), queryFn: () => notebooksApi.get(id), enabled: !!id, }) } export function useCreateNotebook() { const queryClient = useQueryClient() const { toast } = useToast() const { t } = useTranslation() return useMutation({ mutationFn: (data: CreateNotebookRequest) => notebooksApi.create(data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: QUERY_KEYS.notebooks }) toast({ title: t('common.success'), description: t('notebooks.createSuccess'), }) }, onError: (error: unknown) => { toast({ title: t('common.error'), description: t(getApiErrorKey(error, t('common.error'))), variant: 'destructive', }) }, }) } export function useUpdateNotebook() { const queryClient = useQueryClient() const { toast } = useToast() const { t } = useTranslation() return useMutation({ mutationFn: ({ id, data }: { id: string; data: UpdateNotebookRequest }) => notebooksApi.update(id, data), onSuccess: (_, { id }) => { queryClient.invalidateQueries({ queryKey: QUERY_KEYS.notebooks }) queryClient.invalidateQueries({ queryKey: QUERY_KEYS.notebook(id) }) toast({ title: t('common.success'), description: t('notebooks.updateSuccess'), }) }, onError: (error: unknown) => { toast({ title: t('common.error'), description: t(getApiErrorKey(error, t('common.error'))), variant: 'destructive', }) }, }) } export function useNotebookDeletePreview(id: string, enabled: boolean = false) { return useQuery({ queryKey: [...QUERY_KEYS.notebook(id), 'delete-preview'], queryFn: () => notebooksApi.deletePreview(id), enabled: !!id && enabled, }) } export function useDeleteNotebook() { const queryClient = useQueryClient() const { toast } = useToast() const { t } = useTranslation() return useMutation({ mutationFn: ({ id, deleteExclusiveSources = false, }: { id: string deleteExclusiveSources?: boolean }) => notebooksApi.delete(id, deleteExclusiveSources), onSuccess: () => { queryClient.invalidateQueries({ queryKey: QUERY_KEYS.notebooks }) // Also invalidate sources since some may have been deleted queryClient.invalidateQueries({ queryKey: ['sources'] }) toast({ title: t('common.success'), description: t('notebooks.deleteSuccess'), }) }, onError: (error: unknown) => { toast({ title: t('common.error'), description: t(getApiErrorKey(error, t('common.error'))), variant: 'destructive', }) }, }) }