// 网络请求封装
// 按小程序运行环境自动切换后端地址：
// - develop（开发者工具）：本地开发服务
// - trial/release（体验版/正式版）：生产域名（需在微信公众平台配置为 request 合法域名）
const API_HOSTS = {
  develop: 'http://localhost:8080',
  trial: 'https://lunar.neatcn.com',
  release: 'https://lunar.neatcn.com',
};

function resolveBaseUrl() {
  try {
    const envVersion = wx.getAccountInfoSync().miniProgram.envVersion;
    return API_HOSTS[envVersion] || API_HOSTS.release;
  } catch (e) {
    return API_HOSTS.release;
  }
}

const BASE_URL = resolveBaseUrl();

// 请求拦截器
function request(options) {
  return new Promise((resolve, reject) => {
    // 获取 token
    const token = wx.getStorageSync('token');
    
    wx.request({
      url: BASE_URL + options.url,
      method: options.method || 'GET',
      data: options.data || {},
      header: {
        'Content-Type': 'application/json',
        'Authorization': token ? `Bearer ${token}` : '',
        ...options.header,
      },
      success: (res) => {
        if (res.statusCode === 200) {
          resolve(res.data);
        } else if (res.statusCode === 401) {
          // 未授权：清除失效 token，由页面引导重新登录
          wx.removeStorageSync('token');
          reject(new Error('未授权'));
        } else {
          reject(new Error(res.data.msg || '请求失败'));
        }
      },
      fail: (err) => {
        console.error('请求失败:', err);
        reject(err);
      },
    });
  });
}

// 上传文件
function uploadFile(options) {
  return new Promise((resolve, reject) => {
    const token = wx.getStorageSync('token');
    
    wx.uploadFile({
      url: BASE_URL + options.url,
      filePath: options.filePath,
      name: options.name || 'file',
      header: {
        'Authorization': token ? `Bearer ${token}` : '',
      },
      formData: options.formData || {},
      success: (res) => {
        if (res.statusCode === 200) {
          resolve(JSON.parse(res.data));
        } else {
          reject(new Error('上传失败'));
        }
      },
      fail: reject,
    });
  });
}

module.exports = {
  request,
  uploadFile,
  BASE_URL,
};
