const Apps = getApp();
import Toast from '@vant/weapp/toast/toast';
Page({

  /**
   * 页面的初始数据
   */
  data: {
    checked: false,
    showpop: false,
    isLogging: false,  // 添加登录中的标志位，防止重复点击
    redirectUrl: '',   // 登录成功后需要跳转的页面路径
    redirectParams: {}  // 登录成功后需要传递的参数
  },
  onClose() {
    this.setData({ showpop: false });
  },
  bindconfirmdata: function (params) {
    this.setData({ checked: true });
  },

  canclebtn: function (params) {
    this.setData({
      checked: false
    })
  },


  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 接收跳转参数，用于登录成功后返回
    if (options.redirect_url) {
      this.setData({
        redirectUrl: decodeURIComponent(options.redirect_url)
      });
    }
    // 接收其他参数，如 camp_id
    if (options.camp_id) {
      // camp_detail 页面使用 id 参数，所以只传递 id
      this.setData({
        redirectParams: {
          id: options.camp_id  // camp_detail 页面使用 id 参数
        }
      });
    }
  },
  // checkbox 勾选状态变化
  onChange(event) {
    console.log(event.detail);
    this.setData({
      checked: event.detail
    });
  },

  // 显示协议弹窗
  showAgreement() {
    this.setData({
      showpop: true
    });
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    // 保留用户登录态及跳转参数，避免清空导致页面无法正常跳转显示
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },
  /**
   * 获取手机号码登录
   */
  getPhoneNumber(e) {
    const that = this;

    console.log('getPhoneNumber 事件返回:', e.detail);

    // 检查是否勾选协议
    if (that.data.checked == false) {
      Toast.success('请先阅读协议');
      return;
    }

    // 防止重复点击
    if (that.data.isLogging) {
      console.log('正在登录中，请勿重复点击');
      return;
    }

    // 用户拒绝授权
    if (e.detail.errMsg !== 'getPhoneNumber:ok') {
      wx.showToast({
        title: '您拒绝了手机号授权',
        icon: 'none'
      });
      return;
    }

    // 设置登录中状态
    that.setData({
      isLogging: true
    });

    // 显示加载提示
    wx.showLoading({
      title: '登录中...',
      mask: true
    });

    // 获取手机号的加密数据
    const encryptedData = e.detail.encryptedData;  // 加密数据
    const iv = e.detail.iv;               // 加密算法的初始向量

    console.log('手机号 encryptedData:', encryptedData);
    console.log('手机号 iv:', iv);

    // 先调用 wx.login 获取登录凭证 code
    wx.login({
      success(loginRes) {
        if (loginRes.code) {
          const loginCode = loginRes.code;  // 登录凭证，用于获取 openid
          console.log('登录 code:', loginCode);

          // 一次性发起网络请求，传递 code、iv、encryptedData 三个参数
          wx.request({
            // url: 'http://127.0.0.1:8006/addons/unishop/user/authSession',
            url: 'https://ndnd.duiduiedu.com/addons/unishop/user/authSession',
            data: {
              code: loginCode,           // 使用 wx.login 返回的 code
              iv: iv,
              encryptedData: encryptedData,
              platform: 'MP-WEIXIN'
            },
            header: {
              'content-type': 'application/x-www-form-urlencoded'
            },
            method: "POST",
            datatype: 'json',
            success: function (authRes) {
              console.log('authSession 返回:', authRes);
              
              // 关闭加载提示
              wx.hideLoading();
              
              if (!authRes.data || !authRes.data.data) {
                // 重置登录状态
                that.setData({
                  isLogging: false
                });
                
                wx.showToast({
                  title: '登录失败，请重试',
                  icon: 'none'
                });
                return;
              }
              
              // authSession 接口已经返回完整用户信息，直接使用
              const userData = authRes.data.data;
              
              // 保存全局数据
              Apps.globalData.wxopenid = userData.openid;
              Apps.globalData.session_key = userData.userInfo.session_key;
              Apps.globalData.currentuserinfo = userData.userInfo;
              
              // 保存到本地存储
              wx.setStorageSync('wxopenid', userData.openid);
              wx.setStorageSync('wxuserid', userData.userInfo.id);
              wx.setStorageSync('userinfo', userData.userInfo);
              
              // 登录成功，根据是否有跳转参数决定跳转位置
              wx.showToast({
                title: '登录成功',
                icon: 'success',
                duration: 1500
              });
              
              setTimeout(() => {
                // 如果有重定向URL，跳转到指定页面
                if (that.data.redirectUrl) {
                  var redirectUrl = that.data.redirectUrl;
                  // 如果有参数，构建完整的URL
                  if (that.data.redirectParams && Object.keys(that.data.redirectParams).length > 0) {
                    var params = [];
                    for (var key in that.data.redirectParams) {
                      params.push(key + '=' + that.data.redirectParams[key]);
                    }
                    redirectUrl += '?' + params.join('&');
                  }
                  wx.redirectTo({
                    url: redirectUrl
                  });
                } else {
                  // 默认跳转到首页
                  wx.switchTab({
                    url: '/pages/index/index',
                  });
                }
              }, 1500);
            },
            fail: function (err) {
              // 请求失败，重置状态
              wx.hideLoading();
              that.setData({
                isLogging: false
              });
              
              console.log('请求失败:', err);
              wx.showToast({
                title: '网络请求失败，请重试',
                icon: 'none'
              });
            }
          })
        } else {
          // wx.login 失败，重置状态
          wx.hideLoading();
          that.setData({
            isLogging: false
          });
          
          console.log('wx.login 失败：' + loginRes.errMsg);
          wx.showToast({
            title: '登录失败，请重试',
            icon: 'none'
          });
        }
      },
      fail: (loginErr) => {
        // wx.login 调用失败，重置状态
        wx.hideLoading();
        that.setData({
          isLogging: false
        });
        
        console.log('wx.login 调用失败:', loginErr);
        wx.showToast({
          title: '登录失败，请重试',
          icon: 'none'
        });
      }
    })
  }
})