/**
 * @ai-summary React hooks for account deletion functionality
 */

import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { useAuth0 } from '@auth0/auth0-react';
import { useLogout } from '../../../core/auth/useLogout';
import { profileApi } from '../api/profile.api';
import { RequestDeletionRequest } from '../types/profile.types';
import toast from 'react-hot-toast';

interface ApiError {
  response?: {
    data?: {
      error?: string;
    };
  };
  message?: string;
}

export const useDeletionStatus = () => {
  const { isAuthenticated, isLoading } = useAuth0();

  return useQuery({
    queryKey: ['user-deletion-status'],
    queryFn: async () => {
      const response = await profileApi.getDeletionStatus();
      return response.data;
    },
    enabled: isAuthenticated && !isLoading,
    staleTime: 1 * 60 * 1000, // 1 minute
    gcTime: 5 * 60 * 1000, // 5 minutes cache time
    refetchOnWindowFocus: true,
    refetchOnMount: true,
  });
};

export const useRequestDeletion = () => {
  const queryClient = useQueryClient();
  const { logout } = useLogout();

  return useMutation({
    mutationFn: (data: RequestDeletionRequest) => profileApi.requestDeletion(data),
    onSuccess: (response) => {
      queryClient.invalidateQueries({ queryKey: ['user-deletion-status'] });
      queryClient.invalidateQueries({ queryKey: ['user-profile'] });
      toast.success(response.data.message || 'Account deletion scheduled');

      // Logout after 2 seconds (with audit tracking)
      setTimeout(() => {
        logout();
      }, 2000);
    },
    onError: (error: ApiError) => {
      toast.error(error.response?.data?.error || 'Failed to request account deletion');
    },
  });
};

export const useCancelDeletion = () => {
  const queryClient = useQueryClient();

  return useMutation({
    mutationFn: () => profileApi.cancelDeletion(),
    onSuccess: (response) => {
      queryClient.invalidateQueries({ queryKey: ['user-deletion-status'] });
      queryClient.invalidateQueries({ queryKey: ['user-profile'] });
      queryClient.setQueryData(['user-profile'], response.data.profile);
      toast.success('Welcome back! Account deletion cancelled');
    },
    onError: (error: ApiError) => {
      toast.error(error.response?.data?.error || 'Failed to cancel account deletion');
    },
  });
};
