import { useCallback, useState, useEffect } from 'react';
import { useNavigate } from 'react-router-dom';
import * as LocalStorage from '../utilities/localStorage';
import { useMutation, useQueryClient } from 'react-query';
import { EVENT_NAMES } from '../constants/define';

const useProvideAuth = () => {
  const [user, setUser] = useState(null);
  const navigate = useNavigate();
  const localStorageKey = 'user';
  const queryClient = useQueryClient();

  // Đăng ký lắng nghe sự kiện USER_DATA
  useEffect(() => {
    const handleUserData = (event, userData) => {
      console.log("Received user data in custom hook:", userData);
      setUser(userData);
    };

    window.token[EVENT_NAMES.ELECTRONSTORE.USER_DATA](handleUserData);

    // Cleanup function để loại bỏ lắng nghe khi component unmount
    return () => {
      // Code để loại bỏ lắng nghe, nếu có
    };
  }, []); // Mảng phụ thuộc rỗng đảm bảo rằng useEffect chỉ chạy một lần

  const { mutate } = useMutation({
    mutationKey: 'logout',
    mutationFn: async () => {
      setUser(null); // Đặt user thành null trước khi logout
      await window.grpcAPIs[EVENT_NAMES.AUTHENTICATION.LOGOUT]();
    },
    onSuccess: () => {
      LocalStorage.remove(localStorageKey); // Xóa thông tin người dùng từ Local Storage
      navigate('/login', { replace: true });
      queryClient.invalidateQueries(); // Xóa cache của react-query
    },
  });

  // Hàm logout có thể được định nghĩa như một useCallback nếu cần thiết
  const logout = useCallback(() => {
    mutate();
  }, [mutate]);

  return { user, logout };
};

export default useProvideAuth;
