import axiosInstance from '../api/axiosConfig';
import router from '../router'; // 引入 Vue Router 实例
import { justLoggedIn } from './authSessionState'; // Import the flag

const USER_INFO_URL = '/user'; // 获取用户信息的API端点

/**
 * 从 sessionStorage 中安全地读取和解析用户信息。
 * @returns {Object|null} 用户信息对象或null。
 */
export const getStoredUser = () => {
    const storedUser = sessionStorage.getItem('currentUser');
    if (storedUser) {
        try {
            return JSON.parse(storedUser);
        } catch (e) {
            console.error('Error parsing stored user info:', e);
            return null;
        }
    }
    return null;
};

/**
 * 检查Token是否存在且（理论上）是否在有效期内。
 * 服务端 /user接口会验证实际有效期。
 * @returns {boolean} 如果存在token则返回true，否则false。
 */
export const hasValidToken = () => {
    const token = localStorage.getItem('access_token');
    // 简单的存在性检查，实际有效期由 /user 接口判断
    return !!token;
};

/**
 * 获取当前用户信息。
 * 如果Token无效或过期，API会返回401，响应拦截器将处理清除token。
 * @returns {Promise<Object|null>} 用户信息对象或null（如果未登录或获取失败）。
 */
export const getUserInfo = async () => {
    if (!hasValidToken()) {
        throw new Error('No valid token found');
    }
    try {
        const response = await axiosInstance.get(USER_INFO_URL);
        const user = response.data;
        // 将获取到的用户信息存入 sessionStorage
        sessionStorage.setItem('currentUser', JSON.stringify(user));
        return user;
    } catch (error) {
        // 清除可能存在的无效用户信息
        sessionStorage.removeItem('currentUser');
        throw error;
    }
};

/**
 * 处理用户登出。
 * 仅清除本地存储的认证信息。
 */
export const logoutUser = () => { // 不再是 async，因为它不执行异步导航
    // console.log('jwt.js: logoutUser called. Clearing local storage.');
    localStorage.removeItem('access_token');
    localStorage.removeItem('user_id');
    //sessionStorage.removeItem('currentUser'); // 同时清除sessionStorage中的用户信息
    // 导航将由调用者（如路由守卫）处理
};

/**
 * 登录成功后调用，存储token和用户信息，并处理重定向。
 * @param {string} accessToken - 从登录API获取的访问令牌。
 * @param {string} userId - 用户ID。
 */
export const loginSuccess = (accessToken, userId) => {
    // 清除可能存在的旧数据
    localStorage.removeItem('access_token');
    localStorage.removeItem('user_id');
    sessionStorage.removeItem('currentUser');
    
    // 存储新的认证信息
    localStorage.setItem('access_token', accessToken);
    if (userId) {
        localStorage.setItem('user_id', userId);
    }
    
    // 设置登录标志
    justLoggedIn.value = true;
    
    // 获取重定向路径，优先使用查询参数中的redirect，否则跳转到首页
    const currentRoute = router.currentRoute.value;
    const redirectPath = currentRoute.query.redirect || '/';
    
    // 使用replace而不是push，避免在历史记录中留下登录页面
    router.replace(redirectPath);
}; 