// src/api/auth.js
import axios from 'axios';

// 创建并导出 axios 实例
export const api = axios.create({
  baseURL: 'http://localhost:8088',
  timeout: 5000,
});

// 请求拦截器
api.interceptors.request.use(config => {
  const token = localStorage.getItem('token');
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
});

export const login = async (username, password) => {
  const response = await api.post('/user/login', null, {
    params: { username, password }
  });
  if (response.data.code === 200 && response.data.data.token) {
    localStorage.setItem('token', response.data.data.token);
  }
  return response;
};

export const register = (username, password, code) => {
  return api.post('/user/regist', null, {
    params: { username, password, code }
  });
};


export const getUserInfo = (token) => {
  return api.get('/user/info', { params: { token } });
};

// // 修改你的 API 请求
// export const getUserInfo = () => {
//   const token = localStorage.getItem('token');
//   if (!token) {
//     throw new Error("Token 不存在");
//   }
  
//   return api.get('/user/info', {
//     headers: {
//       'Authorization': `Bearer ${token}`  // 必须带 Bearer 前缀
//     }
//   });
// };
