import axios from 'axios';
import config from '../public/config.js';
import { ElMessage } from 'element-plus'
import { useRouter } from 'vue-router'

const router = useRouter()
// 创建一个可以生成axios实例的工厂函数
const createAxiosInstance = (urlnum) => {
  const instance = axios.create({
    baseURL: config.ApiList[urlnum || 0], // 使用传入的baseURL参数
    timeout: 150000,
  });
  // 添加请求拦截器
  instance.interceptors.request.use(config => {
    if (config.headers['Content-Type'] == undefined) {
      config.headers['Content-Type'] = 'application/json';
    }
    if (config.data && typeof config.data === 'object') {
      config.data = JSON.stringify(config.data);
    }
    // ============ token处理逻辑 ============
    // 获取当前请求路径（不含查询参数）
    const requestPath = config.url.split('?')[0];
    //console.log(requestPath);
    // 检查是否需要添加token
    if (!requestPath.includes('Login/Login')) {
      const token = localStorage.getItem('token');
      if (token) {
        config.headers['Authorization'] = `Bearer ${token}`;
      }
    }
    // ============ 结束新增 ============
    return config;
  }, error => Promise.reject(error));

  // 添加响应拦截器
  instance.interceptors.response.use(
    response => {
      if (response.config.url !== 'Login/Login' && response.status === 200) {
        refreshToken();
      }
      return response;
    },
    error => {
      if (error.response.status === 401) {
        ElMessage.error('token失效 请重新登录')
        setTimeout(() => {
          localStorage.removeItem('token')
          window.location.href = '/login'
        }, 233);
      }
      console.log(error);
      return Promise.reject(error);
    }
  );

  return instance;
};

// 创建一个默认实例（保持现有用法兼容）
const defaultInstance = createAxiosInstance(import.meta.env.VITE_API_BASE_URL || '');

// 导出默认实例（保持现有用法）
export default defaultInstance;

// 同时导出工厂函数（用于创建自定义实例）
export { createAxiosInstance };


// Token刷新方法
async function refreshToken() {
  try {
    // 检查上次自动登录时间（新增）
    const lastAutoLoginTime = localStorage.getItem('lastAutoLoginTime');
    const currentTime = new Date().getTime();

    // 如果15分钟内已自动登录过，则跳过（新增）
    if (lastAutoLoginTime && currentTime - lastAutoLoginTime < 15 * 60 * 1000) {
      return;
    }

    const username = localStorage.getItem('rememberedUsername')
    const password = localStorage.getItem('rememberedPassword')

    if (!username || !password) {
      throw new Error('登录过期 请重新登录')
    }

    const formdata = {
      username: username,
      password: password
    }

    // 更新自动登录时间（新增）
    localStorage.setItem('lastAutoLoginTime', currentTime.toString());

    createAxiosInstance(0).post('Login/Login', formdata)
      .then(response => {
        if (response.data.isok) {
          localStorage.setItem('token', response.data.response.accessToken);
          //console.log('自动登录成功')
        } else {
          throw new Error('token更新失败');
        }
      })
      .catch(error => {
        console.error(error);
        // 登录失败时清除时间记录（新增）
        localStorage.removeItem('lastAutoLoginTime');
      })

  } catch (error) {
    return Promise.reject(error)
  }
}
