/*
 * 用户关系及好友关系托管
 */

import store from '../'

// 好友关系,回调
export function onFriends (friends) {
  friends = friends.map(item => {
    if (typeof item.isFriend !== 'boolean') {
      item.isFriend = true
    }
    return item
  })
  store.commit('updateFriends', friends)
  // 更新好友信息字典,诸如昵称
  store.commit('updateUserInfo', friends)
}

// 更新好友资料,添加好友成功
export function onUpdateFriend (error, friends) {
  if (error) {
    alert(error)
    return
  }
  if (!Array.isArray(friends)) {
    friends = [friends]
  }

  friends = friends.map(item => {
    if (typeof item.isFriend !== 'boolean') {
      item.isFriend = true
    }
    return item
  })

  // 补充好友资料
  store.dispatch('searchUsers', {
    accounts: friends.map(item => {
      return item.account
    }),
    done: (users) => {
      const nim = store.state.nim
      friends = nim.mergeFriends(friends, users)
      // 更新好友列表
      store.commit('updateFriends', friends)
      // 更新好友资料
      store.commit('updateUserInfo', friends)
    }
  })
}

// 删除好友,这里使用标记删除
export function onDeleteFriend (error, friends) {
  if (error) {
    alert(error)
    return
  }
  if (!Array.isArray(friends)) {
    friends = [friends]
  }
  friends = friends.map(item => {
    item.isFriend = false
    return item
  })
  // 更新好友列表
  store.commit('updateFriends', [], friends)
  // 更新好友资料
  store.commit('updateUserInfo', friends)
}

export function onSyncFriendAction (obj) {
  switch (obj.type) {
    case 'addFriend':
      // alert('你在其它端直接加了一个好友' + obj.account + ', 附言' + obj.ps);
      onUpdateFriend(null, obj.friend)
      break
    case 'applyFriend':
      // alert('你在其它端申请加了一个好友' + obj.account + ', 附言' + obj.ps);
      break
    case 'passFriendApply':
      alert('你在其它端通过了一个好友申请' + obj.account + ', 附言' + obj.ps)
      onUpdateFriend(null, obj.friend)
      break
    case 'rejectFriendApply':
      // alert('你在其它端拒绝了一个好友申请' + obj.account + ', 附言' + obj.ps);
      break
    case 'deleteFriend':
      // alert('你在其它端删了一个好友' + obj.account);
      onDeleteFriend(null, {
        account: obj.account
      })
      break
    case 'updateFriend':
      // alert('你在其它端更新了一个好友', obj.friend);
      onUpdateFriend(null, obj.friend)
      break
  }
}

// 更新好友昵称
export function updateFriend ({state, commit}, friend) {
  const nim = state.nim
  nim.updateFriend({
    account: friend.account,
    alias: friend.alias,
    done: onUpdateFriend
  })
}

export function addFriend ({state, commit}, account) {
  const nim = state.nim
  nim.addFriend({
    account,
    ps: '',
    done: onUpdateFriend
  })
}

export function deleteFriend ({state, commit}, account) {
  const nim = state.nim
  nim.deleteFriend({
    account,
    done: onDeleteFriend
  })
}