import AuthService from "../services/auth.service";
import PermissionStackUtil from './permission.stack.handler';
const axios = require('axios');

/**
 * Global functions to authenticate user and get user details from browser local storage.
 */
const Auth = {
    /** To check if user already logged in and the token is available in the browser local storage */
    isAuthenticated: () => {
        let user = localStorage.getItem("user");
        if (user) {
            user = JSON.parse(user);
            if (user.token) {
                axios.defaults.headers.common['Authorization'] = `Token ${user.token}`;
                PermissionStackUtil.getPermissions(true);
                return true;
            }
        }
        PermissionStackUtil.getPermissions(false);
        return false;
    },
    /** Gets user details from browser local storage */
    getUser: () => {
        return JSON.parse(localStorage.getItem("user"));
    },
    /** Authenticate user from the backend and store user details in local storage */
    login: async(user, pass) => {
        const authData = await AuthService.authenticate(user, pass);
        if (authData) {
            localStorage.setItem("user", JSON.stringify({name:user, token: authData.token}));
            PermissionStackUtil.getPermissions(true);
            return true;
        }   else {
            return false;
        }
    },
    /** Remove user details from localstorage on logout */
    logout: () => {
        AuthService.deAuthenticate();
        localStorage.removeItem("user");
    }
}

export default Auth;