// 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 } });
};