/**
 * 认证相关API模块
 * 封装所有与后端认证相关的API调用
 * 
 * 【重要说明】：
 * 1. 所有认证相关的API调用都集中在此文件
 * 2. 使用axios进行HTTP请求，支持请求拦截和响应拦截
 * 3. 统一的错误处理和响应格式
 * 4. 与后端API紧密集成
 */

import axios from 'axios';

// 配置axios基础设置
const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:8000';

// 创建axios实例
const apiClient = axios.create({
  baseURL: API_BASE_URL,
  timeout: 30000, // 30秒超时
  headers: {
    'Content-Type': 'application/json',
  },
});

// 请求拦截器 - 添加认证token
apiClient.interceptors.request.use(
  (config) => {
    const token = localStorage.getItem('authToken');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器 - 统一错误处理
apiClient.interceptors.response.use(
  (response) => {
    // 直接返回响应数据，因为后端已经返回了正确的JSON格式
    return response.data;
  },
  (error) => {
    console.error('API请求错误:', error);
    
    // 处理401未授权错误
    if (error.response?.status === 401) {
      localStorage.removeItem('authToken');
      localStorage.removeItem('userInfo');
      window.location.href = '/login';
      return Promise.reject(new Error('用户未授权，请重新登录'));
    }
    
    // 处理其他HTTP错误
    if (error.response?.data) {
      const errorMessage = error.response.data.detail || error.response.data.error || error.response.data.message || '请求失败';
      return Promise.reject(new Error(errorMessage));
    }
    
    // 处理网络错误
    if (error.code === 'ECONNABORTED') {
      return Promise.reject(new Error('请求超时，请稍后重试'));
    }
    
    if (error.message === 'Network Error') {
      return Promise.reject(new Error('网络连接失败，请检查网络设置'));
    }
    
    return Promise.reject(error);
  }
);

// ==================== 认证相关API ====================

/**
 * 【API调用标注】用户注册
 * 后端接口: POST /auth/register
 * 对应后端文件: backend/api/auth_api.py -> register()
 */
export const registerUser = async (userData) => {
  const response = await apiClient.post('/auth/register', userData);
  return response;
};

/**
 * 【API调用标注】用户登录
 * 后端接口: POST /auth/login
 * 对应后端文件: backend/api/auth_api.py -> login()
 */
export const loginUser = async (credentials) => {
  const response = await apiClient.post('/auth/login', credentials);
  return response;
};

/**
 * 【API调用标注】用户登出
 * 后端接口: POST /auth/logout
 * 对应后端文件: backend/api/auth_api.py -> logout()
 */
export const logoutUser = async (token) => {
  const response = await apiClient.post('/auth/logout', { token });
  return response;
};

/**
 * 【API调用标注】获取用户信息
 * 后端接口: GET /auth/user/{user_id}
 * 对应后端文件: backend/api/auth_api.py -> get_user_info()
 */
export const getUserInfo = async (userId) => {
  const response = await apiClient.get(`/auth/user/${userId}`);
  return response;
};

/**
 * 【API调用标注】更新用户信息
 * 后端接口: PUT /auth/user/{user_id}
 * 对应后端文件: backend/api/auth_api.py -> update_user_info()
 */
export const updateUserInfo = async (userId, userData) => {
  const response = await apiClient.put(`/auth/user/${userId}`, userData);
  return response;
};

// ==================== 工具函数 ====================

/**
 * 格式化API错误信息
 */
export const formatApiError = (error) => {
  if (error.response?.data?.error) {
    return error.response.data.error;
  }
  if (error.message) {
    return error.message;
  }
  return '未知错误';
};

/**
 * 检查API连接状态
 */
export const checkApiConnection = async () => {
  try {
    await apiClient.get('/health');
    return true;
  } catch (error) {
    console.error('API连接失败:', error);
    return false;
  }
};

export default apiClient; 