/**
 * 小程序登录授权模块
 * 支持：微信code登录、手机号快捷登录、账号密码登录
 */
const api = require('./api');

/**
 * 微信静默登录（获取code后调用后端wx-login）
 * 返回 { token, user }
 */
function wxCodeLogin() {
  return new Promise((resolve, reject) => {
    wx.login({
      success(res) {
        if (res.code) {
          // 请求后端微信登录接口
          api.wxLogin({ code: res.code })
            .then(data => {
              if (data.token) {
                api.setToken(data.token);
                if (data.user) {
                  wx.setStorageSync('userInfo', data.user);
                }
                resolve(data);
              } else {
                reject(new Error('登录失败'));
              }
            })
            .catch(err => reject(err));
        } else {
          reject(new Error('微信登录失败：' + (res.errMsg || '未知错误')));
        }
      },
      fail(err) {
        reject(new Error('微信登录失败：' + err.errMsg));
      }
    });
  });
}

/**
 * 手机号快捷登录（需用户点击按钮触发）
 * @param {object} detail - bindgetphonenumber 事件的 detail
 */
function phoneNumberLogin(detail) {
  return new Promise((resolve, reject) => {
    if (detail.errMsg.indexOf('ok') === -1) {
      reject(new Error('用户取消授权'));
      return;
    }
    
    // 先获取code
    wx.login({
      success(res) {
        if (res.code) {
          // 调用后端接口，携带encryptedData和iv
          api.wxLogin({
            code: res.code,
            encryptedData: detail.encryptedData,
            iv: detail.iv
          })
            .then(data => {
              if (data.token) {
                api.setToken(data.token);
                if (data.user) {
                  wx.setStorageSync('userInfo', data.user);
                }
                resolve(data);
              } else {
                reject(new Error('登录失败'));
              }
            })
            .catch(err => reject(err));
        } else {
          reject(new Error('获取code失败'));
        }
      }
    });
  });
}

/**
 * 检查登录状态，未登录则跳转
 * @returns {boolean} 是否已登录
 */
function checkLogin() {
  const token = api.getToken();
  if (!token) {
    wx.navigateTo({ url: '/pages/login/login' });
    return false;
  }
  return true;
}

module.exports = {
  wxCodeLogin,
  phoneNumberLogin,
  checkLogin
};
