import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import {
  fetchNotificationPreferences,
  resetNotificationPreferences,
  updateNotificationPreferences,
} from '@/features/notifications/services/notificationService';
import type { NotificationChannelKey } from '@/features/notifications/types/notification.types';

export const notificationPreferencesQueryKey = ['notifications', 'preferences'] as const;

export function useNotificationPreferences() {
  return useQuery({
    queryKey: notificationPreferencesQueryKey,
    queryFn: fetchNotificationPreferences,
    staleTime: 60_000,
  });
}

export function useNotificationPreferenceMutations() {
  const queryClient = useQueryClient();

  const invalidate = () =>
    queryClient.invalidateQueries({ queryKey: notificationPreferencesQueryKey });

  const updateMutation = useMutation({
    mutationFn: (
      preferences: Array<{ notification_type: string; channels: NotificationChannelKey[] }>,
    ) => updateNotificationPreferences(preferences),
    onSuccess: invalidate,
  });

  const resetMutation = useMutation({
    mutationFn: resetNotificationPreferences,
    onSuccess: invalidate,
  });

  return { updateMutation, resetMutation };
}
