import axios from '../http'
import axiosForm from '../httpForm'
import { cryptoMsg, decryptoMsg } from '@/util/util.js'
import Message from '@/store/db/Message.js'

export default {
  /**
   * 群聊 获取最新消息【不需要登录】
   * @param {Object} params
   * @param {Number} params.group_id  会话id
   * @param {Number} params.client_hash 客户端上的最新消息的hash 【可为null】
   */
  async getNewMsg (params) {
    let res = await axios.request({
      url: 'group/newMsg',
      method: 'get',
      needLogin: false,
      params: params
    })

    const objMessage = new Message()
    // 如果不同步执行，第一次初始化数据库会出现很奇怪的问题...
    await objMessage.saveMsg(params['group_id'], res.data.data)

    // 解密数据
    res.data.data.list.forEach(item => {
      if (item.msg_type == 4) {
        // 针对红包类型
        item.msg = JSON.parse(decryptoMsg(item.msg))
      } else {
        item.msg = decryptoMsg(item.msg)
      }
    })

    return res
  },
  /**
   * 群聊 获取历史消息【不需要登录】
   * @param {Object} params
   * @param {Number} params.group_id  会话id
   * @param {Number} params.client_hash 客户端上的最旧消息的hash
   */
  getHistoryMsg (params) {
    return axios.request({
      url: 'group/historyMsg',
      method: 'get',
      needLogin: false,
      params
    })
  },
  /**
   * 群聊信息
   * @param {Object} data
   * @param {Number} data.group_id  会话id
   */
  getGroupInfo (params) {
    return axios.request({
      url: 'group/info',
      method: 'get',
      needLogin: false,
      params
    })
  },
  /**
   * 群聊信息（ 比getGroupInfo多了缓存 ）
   * @param {Object} data
   * @param {Number} data.group_id  会话id
   */
  getGroupInfo2 (params, callback) {
    axios.request2({
      url: 'group/info',
      method: 'get',
      needLogin: false,
      cache: true,
      cacheKeys: ['user_id', 'group_id'],
      params,
      callback
    })
  },
  /**
   * 发送群聊消息
   * @param {Object} data
   * @param {Number} data.group_id  会话id
   * @param {Number} data.msg_type  消息类型：0:文本,1:图片,2:视频
   * @param {String} data.msg   内容
   */
  sendMsg (data) {
    data.msg = cryptoMsg(data.msg)
    return axios.request({
      url: 'group/sendMsg',
      method: 'post',
      needLogin: true,
      data
    })
  },
  /**
   * 创建群组
   * @param {Object} data
   */
  createGroup (data) {
    return axios.request({
      url: 'group/create',
      method: 'post',
      needLogin: true,
      data
    })
  },
  /**
   * 加入群组
   * @param {Object} data
   */
  joinGroup (params) {
    return axios.request({
      url: 'group/join',
      method: 'get',
      needLogin: true,
      params
    })
  },
  /**
   * 离开群组
   * @param {Object} data
   */
  leaveGroup (params) {
    return axios.request({
      url: 'group/leave',
      method: 'get',
      needLogin: true,
      params
    })
  },
  /**
   * 封禁用户
   * @param {Object} data
   */
  blockUser (params) {
    return axios.request({
      url: 'group/blockUser',
      method: 'get',
      needLogin: true,
      params
    })
  },
  /**
   * 解封用户
   * @param {Object} data
   */
  unblockUser (params) {
    return axios.request({
      url: 'group/unblockUser',
      method: 'get',
      needLogin: true,
      params
    })
  },
  /**
   * 更新群名称
   * @param {Object} data
   */
  changeName (data) {
    return axios.request({
      url: 'group/changeName',
      method: 'post',
      needLogin: true,
      data
    })
  },
  /**
   * 更新群公告
   * @param {Object} data
   */
  changeNotice (data) {
    return axios.request({
      url: 'group/changeNotice',
      method: 'post',
      needLogin: true,
      data
    })
  },
  /**
   * 更新群图标
   * @param {Object} data
   */
  changeCover (data) {
    return axiosForm.request({
      url: 'group/changeCover',
      method: 'post',
      data
    })
  },
  /**
   * 更新群标题
   * @param {Object} data
   */
  changeTitle (data) {
    return axios.request({
      url: 'group/changeTitle',
      method: 'post',
      needLogin: true,
      data
    })
  },
  /**
   * 邀请用户
   * @param {Object} data
   */
  invites (data) {
    return axios.request({
      url: 'group/invites',
      method: 'post',
      needLogin: true,
      data
    })
  },
  /**
   * 移除用户
   * @param {Object} data
   */
  removes (data) {
    return axios.request({
      url: 'group/removes',
      method: 'post',
      needLogin: true,
      data
    })
  },
  /**
   * 发送私聊信息
   * @param {Object} data
   * @param {String} data.group_id  会话id
   * @param {String} data.hash 会话hash
   */
  repealGroupMsg (data) {
    return axios.request({
      url: 'group/repealMsg',
      method: 'post',
      needLogin: true,
      data
    })
  },
  /**
   * 发送图片信息
   * @param {Object} formData
   */
  sendImageMsg (data) {
    return axios.request({
      url: 'group/sendImageMsg',
      method: 'post',
      needLogin: true,
      headers: { 'Content-Type': 'multipart/form-data' },
      data
    })
  },
  /**
   * 获取好友列表
   * @param {Object} formData
   */
  getFriends (params) {
    return axios.request({
      url: 'group/getFriends',
      method: 'get',
      needLogin: true,
      params
    })
  },
  /**
   * @param {Object} data
   * @param {String} data.group_id
   * @param {Stirng} data.hash
   */
  pinMsg (data) {
    return axios.request({
      url: 'group/pinMsg',
      method: 'post',
      needLogin: true,
      data
    })
  },
  /**
   * @param {Object} data
   * @param {String} data.group_id
   * @param {Stirng} data.hash
   */
  unpinMsg (data) {
    return axios.request({
      url: 'group/unpinMsg',
      method: 'post',
      needLogin: true,
      data
    })
  },
  /**
   * @param {Object} data
   * @param {String} data.group_id
   * @param {Stirng} data.user_id
   */
  addAdmin (data) {
    return axios.request({
      url: 'group/addAdmin',
      method: 'post',
      needLogin: true,
      data
    })
  },
  /**
   * @param {Object} data
   * @param {String} data.group_id
   * @param {Stirng} data.user_id
   */
  removeAdmin (data) {
    return axios.request({
      url: 'group/removeAdmin',
      method: 'post',
      needLogin: true,
      data
    })
  },
  /**
   * @param {Object} data
   * @param {Stirng} data.keyword
  */
  searchMember (data) {
    return axios.request({
      url: 'group/memberSearch',
      method: 'post',
      needLogin: true,
      data
    })
  },
  /**
   * @param {Object} data
   * @param {Stirng} data.group_id
   * @param {Stirng} data.new_creator
  */
  changeCreator (data) {
    return axios.request({
      url: 'group/changeCreator',
      method: 'post',
      needLogin: true,
      data
    })
  },
  /**
   * @des 热门群推荐
  */
  getHotList  () {
    return axios.request({
      url: 'group/hotList ',
      method: 'post',
      needLogin: true
    })
  }
}
