import {useEffect} from "react";
import Router from "next/router";
import useSWR from "swr";
import {User} from "@/interfaces/user";
import axios from "axios";

const fetcher = (url: string) => axios.get(url).then((res) => res.data);

export default function useUser({redirectTo = "", redirectIfFound = false} = {}) {
	const {data: user, mutate: mutateUser, isLoading, error} = useSWR<User>("/api/user", fetcher);

	useEffect(() => {
		// if no redirect needed, just return (example: already on /dashboard)
		// if user data not yet there (fetch in progress, logged in or not) then don't do anything yet
		if (!redirectTo || !user) return;

		if (
			// If redirectIfFound is also set, redirect if the user was found
			(redirectIfFound && user) ||
			// If redirectTo is set, redirect if the user was not found.
			(redirectTo && !redirectIfFound && !user)
		) {
			Router.push(redirectTo);
		}
	}, [user, redirectIfFound, redirectTo, error]);

	return {user, mutateUser, isLoading};
}
