// 小程序网络请求封装
// const baseURL = 'https://sit-kelamayi.4dage.com/api'; // 根据环境配置（本地测试）
const baseURL = 'https://klmybwg.4dage.com/api'; // 根据环境配置（正式环境）

/**
 * 封装wx.request
 * @param {Object} options 请求配置
 * @param {Boolean} options.useToken 是否使用token，默认false
 * @returns {Promise}
 */
function request(options) {
  return new Promise((resolve, reject) => {
    const {
      url,
      method = 'GET',
      data = {},
      header = {},
      useToken = false
    } = options;

    // 设置默认请求头
    const defaultHeader = {
      'Content-Type': 'application/json;charset=UTF-8',
      ...header
    };
    const app = getApp();
    // 如果需要使用token，则添加到请求头
    if (useToken) {
      let token = null;
      
      // 优先从全局数据获取token
      if (app && app.globalData && app.globalData.token) {
        token = app.globalData.token;
      } else {
        // 如果全局数据没有，尝试从本地存储获取
        token = wx.getStorageSync('token');
      }
      
      if (token) {
        defaultHeader['token'] = `${token}`;
        console.log('添加token到请求头:', token);
      } else {
        console.warn('需要token但未获取到token');
      }
    }

    // 完整的请求URL
    const fullUrl = url.startsWith('http') ? url : baseURL + url;

    // console.log('发送请求:', {
    //   url: fullUrl,
    //   method,
    //   data
    // });

    wx.request({
      url: fullUrl,
      method: method.toUpperCase(),
      data: data,
      header: defaultHeader,
      success: (res) => {
        // console.log('请求成功:', res);
        
        // 统一处理响应数据
        const { data: responseData } = res;
        
        if (res.statusCode === 200) {
          // 根据后端返回的数据结构调整
          if (responseData.code === 200 || responseData.success === true) {
            resolve(responseData.data || responseData);
          } else if (responseData.code === 4008) {
            // 登录失效，提示并延迟跳转到用户页面
            // console.log('登录失效，跳转到用户页面');
            wx.showToast({
              title: '未登录，即将跳转',
              icon: 'none',
            });
            wx.removeStorageSync('token');
            wx.removeStorageSync('userInfo');
            app.globalData.userInfo = null;
            app.globalData.token = null;
            // 延迟1秒后跳转到用户页面并触发自动登录
            setTimeout(() => {
              wx.switchTab({
                url: '/pages/user/index'
              });
            }, 1000);
            
            reject(new Error('登录失效，请重新登录'));
          } else {
            // 处理业务错误
            const errorMsg = responseData.message || responseData.msg || '请求失败';
            console.error('业务错误:', errorMsg);
            reject(new Error(errorMsg));
          }
        } else {
          reject(new Error(`HTTP ${res.statusCode}: ${res.errMsg || '网络错误'}`));
        }
      },
      fail: (error) => {
        console.error('请求失败:', error);
        let errorMsg = '网络错误';
        
        if (error.errMsg) {
          if (error.errMsg.includes('timeout')) {
            errorMsg = '请求超时';
          } else if (error.errMsg.includes('fail')) {
            errorMsg = '网络连接失败';
          }
        }
        
        reject(new Error(errorMsg));
      }
    });
  });
}

module.exports = {
  request,
  baseURL
};