import constant from "../../utils/constant";

// TUIKitWChat/Conversation/index.js
const app = getApp();

Component({
  /**
   * 组件的属性列表
   */
  properties: {
    config: {
      type: Object,
      value: {},
      observer(config) {
      },
    },
  },

  /**
   * 组件的初始数据
   */
  data: {
    conversationList: [],
    currentConversationID: '',
    showSelectTag: false,
    array: [
      { id: 1, name: '发起会话' },
      { id: 2, name: '发起群聊' },
      { id: 3, name: '加入群聊' },
    ],
    index: Number,
    unreadCount: 0,
    conversationInfomation: {},
    transChenckID: '',
    userIDList: [],
    statusList: [],
    currentUserIDList: [],
    showConversationList: true,
    showCreateConversation: false,
    showCreateGroup: false,
    showJoinGroup: false,
    handleChangeStatus: false,
    storageList: [],
  },
  lifetimes: {
    attached() {
    },
    detached() {
      wx.$TUIKit.off(wx.$TUIKitTIM.EVENT.CONVERSATION_LIST_UPDATED, this.onConversationListUpdated, this);
      wx.$TUIKit.off(wx.$TUIKitTIM.EVENT.USER_STATUS_UPDATED, this.onUserStatusUpdate, this);
    },
  },

  /**
   * 组件的方法列表
   */
  methods: {
    init() {
      wx.$TUIKit.on(wx.$TUIKitTIM.EVENT.CONVERSATION_LIST_UPDATED, this.onConversationListUpdated, this);
      wx.$TUIKit.on(wx.$TUIKitTIM.EVENT.USER_STATUS_UPDATED, this.onUserStatusUpdate, this);
      this.getConversationList();
      wx.getStorageInfo({
        success(res) {
          wx.setStorage({
            key: 'storageList',
            data: res.keys,
          });
        },
      });
      this.setData({
        handleChangeStatus: wx.getStorageSync(app?.globalData?.userInfo?.userID) ? wx.getStorageSync(app?.globalData?.userInfo?.userID) : true,
      }, () => {
        if (!wx.getStorageSync('storageList').includes('showOnlineStatus')) {
          this.handleChangeStatus();
        }
      });
    },
    goBack() {
      if (app?.globalData?.reportType !== constant.OPERATING_ENVIRONMENT) {
        wx.navigateBack({
          delta: 1,
        });
      } else {
        wx.switchTab({
          url: '/pages/TUI-Index/index',
        });
      }
    },
    // 更新会话列表
    onConversationListUpdated(event) {
      this.setData({
        conversationList: event.data,
      });
      this.filterUserIDList(event.data);
    },
    transCheckID(event) {
      this.setData({
        transChenckID: event.detail.checkID,
      });
    },
    // 更新状态
    onUserStatusUpdate(event) {
      event.data.forEach((element) => {
        const index = this.data.statusList.findIndex(item => item.userID === element.userID);
        if (index === -1) {
          return;
        }
        this.data.statusList[index] = element;
        this.setData({
          statusList: this.data.statusList,
        });
      });
    },
    getConversationList() {
      wx.$TUIKit.getConversationList().then((imResponse) => {
        this.setData({
          conversationList: imResponse.data.conversationList,
        });
        this.filterUserIDList(imResponse.data.conversationList);
      });
    },
    // 跳转到子组件需要的参数
    handleRoute(event) {
      const flagIndex = this.data.conversationList.findIndex(item => item.conversationID === event.currentTarget.id);
      this.setData({
        index: flagIndex,
      });
      this.getConversationList();
      this.setData({
        currentConversationID: event.currentTarget.id,
        unreadCount: this.data.conversationList[this.data.index].unreadCount,
      });
      this.triggerEvent('currentConversationID', { currentConversationID: event.currentTarget.id,
        unreadCount: this.data.conversationList[this.data.index].unreadCount });
    },
    // 展示发起会话/发起群聊/加入群聊
    showSelectedTag() {
      wx.aegis.reportEvent({
        name: 'conversationType',
        ext1: 'conversationType-all',
      });
      this.setData({
        showSelectTag: !this.data.showSelectTag,
      });
    },
    handleOnTap(event) {
      this.setData({
        showSelectTag: false,
      }, () => {
        switch (event.currentTarget.dataset.id) {
          case 1:
            this.setData({
              showCreateConversation: true,
              showConversationList: false,
            });
            break;
          case 2:
            this.setData({
              showCreateGroup: true,
              showConversationList: false,
            });
            break;
          case 3:
            this.setData({
              showJoinGroup: true,
              showConversationList: false,
            });
            break;
          default:
            break;
        }
      });
    },
    // 点击空白区域关闭showMore弹窗
    handleEditToggle() {
      this.setData({
        showSelectTag: false,
      });
    },
    showConversation(event) {
      this.setData({
        showConversationList: true,
        showCreateConversation: false,
        showCreateGroup: false,
        showJoinGroup: false,
      });
    },
    searchUserID(event) {
      this.triggerEvent('currentConversationID', { currentConversationID: event.detail.searchUserID });
    },
    searchGroupID(event) {
      this.triggerEvent('currentConversationID', { currentConversationID: event.detail.searchGroupID });
    },
    createGroupID(event) {
      this.triggerEvent('currentConversationID', { currentConversationID: event.detail.createGroupID });
    },
    // 处理当前登录账号是否开启在线状态
    handleChangeStatus() {
      const currentID = wx.$chat_userID;
      const cacheList = wx.getStorageSync('currentUserID');
      const nowList = [];
      nowList.push(wx.$chat_userID);
      if (cacheList.length === 0 || !cacheList.includes(wx.$chat_userID)) {
        wx.setStorage({
          key: 'currentUserID',
          data: wx.getStorageSync('currentUserID').concat(nowList),
        });
      }
      wx.setStorage({
        key: currentID,
        data: this.data.handleChangeStatus,
      });
    },
    // 订阅在线状态
    subscribeOnlineStatus(userIDList) {
      wx.$TUIKit.getUserStatus({ userIDList }).then((imResponse) => {
        const { successUserList } = imResponse.data;
        this.setData({
          statusList: successUserList,
        });
      })
        .catch((imError) => {
          console.warn('getUserStatus error:', imError); // 获取用户状态失败的相关信息
        });
      wx.$TUIKit.subscribeUserStatus({ userIDList });
    },

    // 过滤会话列表，找出C2C会话，以及需要订阅状态的userIDList
    filterUserIDList(conversationList) {
      if (conversationList.length === 0) return;
      const userIDList = [];
      conversationList.forEach((element) => {
        if (element.type === wx.$TUIKitTIM.TYPES.CONV_C2C) {
          userIDList.push(element.userProfile.userID);
        }
      });
      const currentUserID = wx.getStorageSync('currentUserID');
      if (currentUserID.includes(wx.$chat_userID)) {
        const currentStatus = wx.getStorageSync(wx.$chat_userID);
        if (currentStatus) {
          this.subscribeOnlineStatus(userIDList);
        }
      } else {
        this.subscribeOnlineStatus(userIDList);
      }
    },

    learnMore() {
      if (app?.globalData?.reportType !== constant.OPERATING_ENVIRONMENT) return;
      app.method.navigateTo({
        url: '/pages/TUI-User-Center/webview/webview?url=https://cloud.tencent.com/product/im',
      });
    },
  },
});
