"use client";
import { useToken } from "@/hooks/use-token";
import axios from "axios";
import { createContext, useContext } from "react";
import { UserProfileData } from "@/types";

import { useQuery } from "@tanstack/react-query";
import { useLanguage } from "@/store/language-context";
import { useTranslation } from "react-i18next";

export const UserProfileContext = createContext<UserProfileData>(null);

export const UserProfileProvider = ({ children }) => {
    const token = useToken();
    const { URL } = useLanguage();
    const { t } = useTranslation();

    const { data: profile, error, isLoading: loading } = useQuery({
        queryKey: ['user-profile', token, URL],
        queryFn: async () => {
            const response = await axios.get(`${URL}/profile`, {
                headers: {
                    Authorization: `Bearer ${token}`
                }
            });
            if (response.status !== 200) throw new Error(t('custom.err'));
            return response?.data?.data
        },
        retry: 1,
        refetchOnMount: false,
        refetchOnWindowFocus: false,
        enabled: !!token && !!URL
    });

    return (
        <UserProfileContext.Provider
            value={{
                profile,
                error,
                loading,
            }}>
            {children}
        </UserProfileContext.Provider>
    );
};

export const useUserData = () => useContext(UserProfileContext);