import { useMutation, useQueryClient } from '@tanstack/react-query';
import {
  deleteSetting,
  resetSetting,
  updateSetting,
  type SettingsRequestContext,
} from '@/features/settings/services/settingsService';
import type { SettingScope } from '@/features/settings/types/settings.types';
import { settingsQueryKey } from '@/features/settings/hooks/useSettings';

export function useSettingMutations(group?: string, ctx?: SettingsRequestContext) {
  const queryClient = useQueryClient();

  const invalidate = () =>
    queryClient.invalidateQueries({ queryKey: settingsQueryKey(group, ctx) });

  const updateMutation = useMutation({
    mutationFn: ({
      key,
      value,
      scope,
    }: {
      key: string;
      value: unknown;
      scope?: SettingScope;
    }) => updateSetting(key, value, scope, ctx),
    onSuccess: invalidate,
  });

  const resetMutation = useMutation({
    mutationFn: ({ key, scope }: { key: string; scope?: SettingScope }) =>
      resetSetting(key, scope, ctx),
    onSuccess: invalidate,
  });

  const deleteMutation = useMutation({
    mutationFn: ({ key, scope }: { key: string; scope?: SettingScope }) =>
      deleteSetting(key, scope, ctx),
    onSuccess: invalidate,
  });

  return { updateMutation, resetMutation, deleteMutation };
}
