import axios from 'axios';
import { useUserStore } from '@/stores/user';


/**
 * 检查用户登录状态
 * 如果本地存储中有token，则尝试验证token有效性
 * @returns {Promise<boolean>} 是否登录成功
 */
export async function checkLoginStatus() {
  const accessToken = localStorage.getItem('accessToken');
  const refreshToken = localStorage.getItem('refreshToken');
  
  // 如果没有token，直接返回未登录
  if (!accessToken || !refreshToken) {
    console.log('本地没有找到token，无需验证登录状态');
    return false;
  }
  
  // 检查token格式是否正确
  if (!isValidToken(accessToken) || !isValidToken(refreshToken)) {
    console.log('Token格式不正确，清除无效token');
    clearAuthTokens();
    return false;
  }
  
  try {
    console.log('正在验证登录状态...');
    // 使用axios直接发送请求，避免request拦截器中可能的循环依赖
    const response = await axios.post('/user/check-login', null, {
      headers: {
        'Authorization': `Bearer ${accessToken}`,
        'X-Refresh-Token': refreshToken
      },
      // 设置超时时间，避免长时间等待
      timeout: 5000
    });
    
    if (response.data && response.data.code === 200 && response.data.data) {
      console.log('登录状态有效，用户信息:', response.data.data);
      
      // 更新用户状态
      const userStore = useUserStore();
      userStore.login({
        userid: response.data.data.userId,
        userName: response.data.data.username,
        avatar: response.data.data.avatar,
        role: response.data.data.role,
        accessToken: response.data.data.accessToken || accessToken,
        refreshToken: response.data.data.refreshToken || refreshToken
      });
      
      // 如果返回了新的token，更新本地存储
      if (response.data.data.accessToken) {
        localStorage.setItem('accessToken', response.data.data.accessToken);
      }
      if (response.data.data.refreshToken) {
        localStorage.setItem('refreshToken', response.data.data.refreshToken);
      }
      
      return true;
    } else {
      console.log('登录状态已过期或无效');
      // 如果后端明确表示token无效，则清除token
      if (response.data && response.data.code === 401) {
        clearAuthTokens();
      }
      return false;
    }
  } catch (error) {
    console.error('验证登录状态失败:', error);
    
    // 如果是网络错误、超时或服务器未响应，保留token并尝试从localStorage恢复
    if (!error.response || error.code === 'ECONNABORTED') {
      console.log('网络错误或服务器未响应，尝试从localStorage恢复登录状态');
      
      // 如果localStorage中有用户信息，则维持登录状态
      const userId = localStorage.getItem('userId');
      const username = localStorage.getItem('username');
      const avatar = localStorage.getItem('avatar');
      const role = localStorage.getItem('role');
      
      if (userId && username) {
        const userStore = useUserStore();
        userStore.login({
          userid: userId,
          userName: username,
          avatar: avatar || '',
          role: role || 1,
          accessToken: accessToken,
          refreshToken: refreshToken
        });
        console.log('从localStorage成功恢复用户登录状态:', username);
        return true;
      }
      
      return false;
    }
    
    // 只有在确认token格式错误时才清除
    if (error.response && error.response.status === 500 && 
        error.response.data?.message?.includes('token')) {
      console.log('Token格式错误，清除token');
      clearAuthTokens();
    }
    return false;
  }
}

/**
 * 检查token格式是否有效
 * @param {string} token 要检查的token
 * @returns {boolean} 是否有效
 */
function isValidToken(token) {
  // 简单检查token是否为字符串且长度合理
  return typeof token === 'string' && token.length > 10;
}

/**
 * 清除认证令牌
 */
export function clearAuthTokens() {
  localStorage.removeItem('accessToken');
  localStorage.removeItem('refreshToken');
  localStorage.removeItem('userId');
  localStorage.removeItem('username');
  localStorage.removeItem('avatar');
  localStorage.removeItem('role');
  const userStore = useUserStore();
  userStore.logout();
} 