/**
 * Soul创业派对 - 设置页
 * 账号绑定功能
 */
const app = getApp()

Page({
  data: {
    statusBarHeight: 44,
    isLoggedIn: false,
    userInfo: null,
    version: '1.0.0',
    
    // 绑定信息
    phoneNumber: '',
    wechatId: '',
    alipayAccount: '',
    address: '',
    
    // 自动提现（默认开启）
    autoWithdrawEnabled: true,
    
    // 绑定弹窗
    showBindModal: false,
    bindType: '', // phone | wechat | alipay
    bindValue: ''
  },

  onLoad() {
    this.setData({
      statusBarHeight: app.globalData.statusBarHeight,
      isLoggedIn: app.globalData.isLoggedIn,
      userInfo: app.globalData.userInfo
    })
    this.loadBindingInfo()
  },

  onShow() {
    this.loadBindingInfo()
  },

  // 加载绑定信息
  loadBindingInfo() {
    const { userInfo, isLoggedIn } = app.globalData
    if (isLoggedIn && userInfo) {
      // 从本地存储或用户信息中获取绑定数据
      const phoneNumber = wx.getStorageSync('user_phone') || userInfo.phone || ''
      const wechatId = wx.getStorageSync('user_wechat') || userInfo.wechat || ''
      const alipayAccount = wx.getStorageSync('user_alipay') || userInfo.alipay || ''
      const address = wx.getStorageSync('user_address') || userInfo.address || ''
      // 默认开启自动提现
      const autoWithdrawEnabled = wx.getStorageSync('auto_withdraw_enabled') !== false
      
      this.setData({
        isLoggedIn: true,
        userInfo,
        phoneNumber,
        wechatId,
        alipayAccount,
        address,
        autoWithdrawEnabled
      })
    }
  },
  
  // 一键获取收货地址
  async getAddress() {
    try {
      const res = await wx.chooseAddress()
      if (res) {
        const fullAddress = `${res.provinceName}${res.cityName}${res.countyName}${res.detailInfo}`
        
        wx.setStorageSync('user_address', fullAddress)
        this.setData({ address: fullAddress })
        
        // 更新用户信息
        if (app.globalData.userInfo) {
          app.globalData.userInfo.address = fullAddress
          wx.setStorageSync('userInfo', app.globalData.userInfo)
        }
        
        // 同步到服务器
        this.syncProfileToServer()
        
        wx.showToast({ title: '地址已获取', icon: 'success' })
      }
    } catch (e) {
      console.log('[Settings] 获取地址失败:', e)
      if (e.errMsg?.includes('auth deny')) {
        wx.showModal({
          title: '需要授权',
          content: '请允许获取收货地址',
          confirmText: '去设置',
          success: (res) => {
            if (res.confirm) wx.openSetting()
          }
        })
      }
    }
  },
  
  // 切换自动提现
  async toggleAutoWithdraw(e) {
    const enabled = e.detail.value
    
    // 检查是否绑定了支付方式
    if (enabled && !this.data.wechatId && !this.data.alipayAccount) {
      wx.showToast({ title: '请先绑定微信号或支付宝', icon: 'none' })
      this.setData({ autoWithdrawEnabled: false })
      return
    }
    
    // 开启时需要确认
    if (enabled) {
      wx.showModal({
        title: '开启自动提现',
        content: `收益将自动打款到您的${this.data.alipayAccount ? '支付宝' : '微信'}账户，确认开启吗？`,
        success: async (res) => {
          if (res.confirm) {
            this.setData({ autoWithdrawEnabled: true })
            wx.setStorageSync('auto_withdraw_enabled', true)
            
            // 同步到服务器
            try {
              await app.request('/api/user/update', {
                method: 'POST',
                data: {
                  userId: app.globalData.userInfo?.id,
                  autoWithdraw: true,
                  withdrawAccount: this.data.alipayAccount || this.data.wechatId
                }
              })
            } catch (e) {
              console.log('同步自动提现设置失败', e)
            }
            
            wx.showToast({ title: '已开启自动提现', icon: 'success' })
          } else {
            this.setData({ autoWithdrawEnabled: false })
          }
        }
      })
    } else {
      this.setData({ autoWithdrawEnabled: false })
      wx.setStorageSync('auto_withdraw_enabled', false)
      wx.showToast({ title: '已关闭自动提现', icon: 'success' })
    }
  },

  // 绑定手机号
  bindPhone() {
    this.setData({
      showBindModal: true,
      bindType: 'phone',
      bindValue: ''
    })
  },

  // 微信号输入
  onWechatInput(e) {
    this.setData({ wechatId: e.detail.value })
  },
  
  // 保存微信号
  async saveWechat() {
    const { wechatId } = this.data
    if (!wechatId || wechatId.length < 6) return
    
    wx.setStorageSync('user_wechat', wechatId)
    
    // 更新用户信息
    if (app.globalData.userInfo) {
      app.globalData.userInfo.wechat = wechatId
      wx.setStorageSync('userInfo', app.globalData.userInfo)
    }
    
    // 同步到服务器
    try {
      await app.request('/api/user/update', {
        method: 'POST',
        data: {
          userId: app.globalData.userInfo?.id,
          wechat: wechatId
        }
      })
      wx.showToast({ title: '微信号已保存', icon: 'success' })
    } catch (e) {
      console.log('保存微信号失败', e)
    }
  },

  // 输入绑定值
  onBindInput(e) {
    let value = e.detail.value
    if (this.data.bindType === 'phone') {
      value = value.replace(/\D/g, '').slice(0, 11)
    }
    this.setData({ bindValue: value })
  },

  // 确认绑定
  confirmBind() {
    const { bindType, bindValue } = this.data
    
    if (!bindValue) {
      wx.showToast({ title: '请输入内容', icon: 'none' })
      return
    }
    
    // 验证
    if (bindType === 'phone' && !/^1[3-9]\d{9}$/.test(bindValue)) {
      wx.showToast({ title: '请输入正确的手机号', icon: 'none' })
      return
    }
    
    if (bindType === 'wechat' && bindValue.length < 6) {
      wx.showToast({ title: '微信号至少6位', icon: 'none' })
      return
    }
    
    if (bindType === 'alipay' && !bindValue.includes('@') && !/^1[3-9]\d{9}$/.test(bindValue)) {
      wx.showToast({ title: '请输入正确的支付宝账号', icon: 'none' })
      return
    }
    
    // 保存绑定信息到本地
    if (bindType === 'phone') {
      wx.setStorageSync('user_phone', bindValue)
      this.setData({ phoneNumber: bindValue })
    } else if (bindType === 'wechat') {
      wx.setStorageSync('user_wechat', bindValue)
      this.setData({ wechatId: bindValue })
    } else if (bindType === 'alipay') {
      wx.setStorageSync('user_alipay', bindValue)
      this.setData({ alipayAccount: bindValue })
    }
    
    // 同步到服务器
    this.syncProfileToServer()
    
    this.setData({ showBindModal: false })
    wx.showToast({ title: '绑定成功', icon: 'success' })
  },
  
  // 同步资料到服务器
  async syncProfileToServer() {
    try {
      const userId = app.globalData.userInfo?.id
      if (!userId) return
      
      const res = await app.request('/api/user/profile', {
        method: 'POST',
        data: {
          userId,
          phone: this.data.phoneNumber || undefined,
          wechatId: this.data.wechatId || undefined
        }
      })
      
      if (res.success) {
        console.log('[Settings] 资料同步成功')
        // 更新本地用户信息
        if (app.globalData.userInfo) {
          app.globalData.userInfo.phone = this.data.phoneNumber
          app.globalData.userInfo.wechatId = this.data.wechatId
          wx.setStorageSync('userInfo', app.globalData.userInfo)
        }
      }
    } catch (e) {
      console.log('[Settings] 资料同步失败:', e)
    }
  },
  
  // 获取微信头像（新版授权）
  async getWechatAvatar() {
    try {
      const res = await wx.getUserProfile({
        desc: '用于完善会员资料'
      })
      
      if (res.userInfo) {
        const { nickName, avatarUrl } = res.userInfo
        
        // 更新本地
        this.setData({
          userInfo: {
            ...this.data.userInfo,
            nickname: nickName,
            avatar: avatarUrl
          }
        })
        
        // 同步到服务器
        const userId = app.globalData.userInfo?.id
        if (userId) {
          await app.request('/api/user/profile', {
            method: 'POST',
            data: { userId, nickname: nickName, avatar: avatarUrl }
          })
        }
        
        // 更新全局
        if (app.globalData.userInfo) {
          app.globalData.userInfo.nickname = nickName
          app.globalData.userInfo.avatar = avatarUrl
          wx.setStorageSync('userInfo', app.globalData.userInfo)
        }
        
        wx.showToast({ title: '头像更新成功', icon: 'success' })
      }
    } catch (e) {
      console.log('[Settings] 获取头像失败:', e)
      wx.showToast({ title: '获取头像失败', icon: 'none' })
    }
  },
  
  // 一键获取微信手机号（button组件回调）
  async onGetPhoneNumber(e) {
    console.log('[Settings] 获取手机号回调:', e.detail)
    
    if (e.detail.errMsg !== 'getPhoneNumber:ok') {
      wx.showToast({ title: '授权失败', icon: 'none' })
      return
    }
    
    try {
      // 需要将code发送到服务器解密获取手机号
      const code = e.detail.code
      if (!code) {
        // 如果没有code，弹出手动输入
        this.bindPhone()
        return
      }
      
      wx.showLoading({ title: '获取中...', mask: true })
      
      // 调用服务器解密手机号
      const res = await app.request('/api/miniprogram/phone', {
        method: 'POST',
        data: { code }
      })
      
      wx.hideLoading()
      
      if (res.success && res.phoneNumber) {
        wx.setStorageSync('user_phone', res.phoneNumber)
        this.setData({ phoneNumber: res.phoneNumber })
        
        // 更新用户信息
        if (app.globalData.userInfo) {
          app.globalData.userInfo.phone = res.phoneNumber
          wx.setStorageSync('userInfo', app.globalData.userInfo)
        }
        
        // 同步到服务器
        this.syncProfileToServer()
        
        wx.showToast({ title: '手机号绑定成功', icon: 'success' })
      } else {
        // 获取失败，弹出手动输入
        this.bindPhone()
      }
    } catch (e) {
      wx.hideLoading()
      console.log('[Settings] 获取手机号失败:', e)
      // 获取失败，弹出手动输入
      this.bindPhone()
    }
  },

  // 关闭绑定弹窗
  closeBindModal() {
    this.setData({ showBindModal: false })
  },

  // 清除缓存
  clearCache() {
    wx.showModal({
      title: '清除缓存',
      content: '确定要清除本地缓存吗？',
      success: (res) => {
        if (res.confirm) {
          // 保留登录信息，只清除其他缓存
          const token = wx.getStorageSync('token')
          const userInfo = wx.getStorageSync('userInfo')
          wx.clearStorageSync()
          if (token) wx.setStorageSync('token', token)
          if (userInfo) wx.setStorageSync('userInfo', userInfo)
          wx.showToast({ title: '缓存已清除', icon: 'success' })
        }
      }
    })
  },

  // 退出登录
  handleLogout() {
    wx.showModal({
      title: '退出登录',
      content: '确定要退出登录吗？',
      success: (res) => {
        if (res.confirm) {
          app.logout()
          this.setData({ 
            isLoggedIn: false, 
            userInfo: null,
            phoneNumber: '',
            wechatId: '',
            alipayAccount: ''
          })
          wx.showToast({ title: '已退出登录', icon: 'success' })
          setTimeout(() => wx.navigateBack(), 1500)
        }
      }
    })
  },

  // 联系客服 - 跳转到Soul派对房
  contactService() {
    wx.showToast({ title: '请在Soul派对房联系客服', icon: 'none' })
  },

  // 阻止冒泡
  stopPropagation() {},

  goBack() { wx.navigateBack() }
})
