var api = require('../../utils/api')
var config = require('../../config/env')
var app = getApp()

Page({
  data: {
    userInfo: null,
    subscription: null,
    deviceCount: 0,
    subRemaining: 0,
    loading: true,
    editing: false,
    editNickname: '',
    editAvatarUrl: '',
    saving: false
  },

  onShow: function () {
    this.loadProfile()
  },

  loadProfile: function () {
    var self = this
    self.setData({ loading: true })

    var p1 = api.getProfile().then(function (profile) {
      self.setData({
        userInfo: profile,
        deviceCount: profile.device_count || 0
      })
    }).catch(function (err) {
      console.error('getProfile failed', err)
    })

    var p2 = api.getSubscription().then(function (sub) {
      self.setData({
        subscription: sub,
        subRemaining: sub.remaining_days || 0
      })
    }).catch(function (err) {
      console.error('getSubscription failed', err)
    })

    Promise.all([p1, p2]).then(function () {
      self.setData({ loading: false })
    })
  },

  onManageDevice: function () {
    var self = this
    if (this.data.deviceCount > 0) {
      wx.showActionSheet({
        itemList: ['解绑当前设备'],
        success: function (res) {
          if (res.tapIndex === 0) {
            wx.showModal({
              title: '确认解绑',
              content: '解绑后将无法使用该设备，确定要解绑吗？',
              success: function (modalRes) {
                if (modalRes.confirm) {
                  api.unbindDevice().then(function () {
                    wx.showToast({ title: '已解绑', icon: 'success' })
                    self.loadProfile()
                  }).catch(function (err) {
                    wx.showToast({ title: err.message || '解绑失败', icon: 'none' })
                  })
                }
              }
            })
          }
        }
      })
    } else {
      wx.navigateTo({ url: '/pages/scan/scan' })
    }
  },

  onViewSubscription: function () {
    wx.navigateTo({ url: '/pages/subscribe-plans/subscribe-plans' })
  },

  onViewHistory: function () {
    wx.switchTab({ url: '/pages/history/history' })
  },

  onHelp: function () {
    wx.navigateTo({ url: '/pages/help/help' })
  },

  onContact: function () {
    wx.navigateTo({ url: '/pages/contact/contact' })
  },

  onEditProfile: function () {
    var info = this.data.userInfo || {}
    this.setData({
      editing: true,
      editNickname: info.nickname || '',
      editAvatarUrl: info.avatar || ''
    })
  },

  onCancelEdit: function () {
    this.setData({ editing: false })
  },

  onEditNicknameInput: function (e) {
    this.setData({ editNickname: e.detail.value || '' })
  },

  onPickAvatar: function () {
    var self = this
    wx.chooseMedia({
      count: 1,
      mediaType: ['image'],
      sourceType: ['album', 'camera'],
      success: function (res) {
        if (res.tempFiles && res.tempFiles[0]) {
          self.setData({ editAvatarUrl: res.tempFiles[0].tempFilePath })
        }
      }
    })
  },

  uploadAvatar: function (tempPath) {
    return new Promise(function (resolve, reject) {
      var token = wx.getStorageSync('token')
      wx.uploadFile({
        url: config.API_BASE + '/api/v1/user/avatar',
        filePath: tempPath,
        name: 'file',
        header: { Authorization: 'Bearer ' + token },
        success: function (res) {
          try {
            var data = JSON.parse(res.data)
            if (data.code === 0 && data.data && data.data.avatar) {
              resolve(data.data.avatar)
            } else {
              reject(new Error(data.message || '上传失败'))
            }
          } catch (e) {
            reject(new Error('上传失败'))
          }
        },
        fail: function () { reject(new Error('上传失败')) }
      })
    })
  },

  onSaveProfile: function () {
    var self = this
    var nickname = (self.data.editNickname || '').trim()
    if (!nickname) {
      wx.showToast({ title: '昵称不能为空', icon: 'none' })
      return
    }

    self.setData({ saving: true })

    var avatarUrl = self.data.editAvatarUrl
    var isLocalFile = avatarUrl && (avatarUrl.indexOf('wxfile://') === 0 || avatarUrl.indexOf('http://tmp') === 0)
    var avatarPromise = isLocalFile
      ? self.uploadAvatar(avatarUrl)
      : Promise.resolve(avatarUrl || '')

    avatarPromise.then(function (permanentUrl) {
      return api.updateProfile({
        nickname: nickname,
        avatar: permanentUrl || ''
      })
    }).then(function () {
      self.setData({ saving: false, editing: false })
      wx.showToast({ title: '保存成功', icon: 'success' })
      self.loadProfile()
    }).catch(function (err) {
      self.setData({ saving: false })
      wx.showToast({ title: err.message || '保存失败', icon: 'none' })
    })
  },

  onLogout: function () {
    wx.showModal({
      title: '退出登录',
      content: '确定要退出登录吗？',
      success: function (res) {
        if (res.confirm) {
          wx.removeStorageSync('token')
          wx.reLaunch({ url: '/pages/login/login' })
        }
      }
    })
  }
})
