<template>
    <div class="content">
      <div class="horizontal-invited-wrapper" v-if="state.invited_list.length">
        invited（{{state.inviteCount}}）
        <div class="horizontal-invited-list" @mouseleave="invitedListMouseleave($event)">
          <template v-for="(item, index) in state.invited_list" :key="index" >
            <div class="invited-item" v-if="index < 9" @mouseenter="invitedItemMouseenter(item)">
             <img :src="item.userInfo.avatarUrl" />
            </div>
          </template>
        </div>
        <img class="more" v-if="state.invited_list.length > 9" :src="require('@/assets/svg/icon-invited-more.svg')"  @mouseenter="moreMouseenter"  @mouseleave="moreMouseleave" />
      </div>

      <div class="invited-user-info"  @mouseenter="invitedItemMouseenter()"
       @mouseleave="invitedListMouseleave($event)" v-if="hoverInvitedUserInfo.userInfo">
        <div class="left">
            <img class="avatar" :src="hoverInvitedUserInfo.userInfo.avatarUrl" />
        </div>
        <div class="right">
            <div class="user-info">
              <div class="name">
              {{ hoverInvitedUserInfo.userInfo.nickName }}
              </div>
              <div class="time">
                {{ getTime(hoverInvitedUserInfo.timestamp) }}
              </div>
            </div>
            <span class="channel">
              <img class="app-icon" :src="hoverInvitedUserInfo.userInfo.avatarUrl" />
              WhatsApp
            </span>
        </div>
      </div>

      <div class="vertical-invited-wrapper" v-if="showVerticalInvitedList" @mouseenter="moreMouseenter"  @mouseleave="moreMouseleave" @scroll="handleScroll($event)">
        <div class="invited-user-info"  v-for="(item, index) in state.invited_list" :key="index">
          <div class="left">
              <img @click="clickItem(item)" class="avatar" :src="item.userInfo.avatarUrl" />
          </div>
          <div class="right">
              <div class="user-info">
                <div class="name">
                {{ item.userInfo.nickName }}
                </div>
                <div class="time">
                  {{ getTime(item.timestamp) }}
                </div>
              </div>
              <span class="channel">
                <img class="app-icon" :src="item.userInfo.avatarUrl" />
                WhatsApp
              </span>
          </div>
        </div>
      </div>

        <!-- <div class="list" @scroll="handleScroll($event)">
            <div class="item" v-for="item in state.invited_list" :key="item.userInfo.uid">
                <div class="left">
                    <img :src="item.userInfo.avatarUrl" alt="" @click="clickItem(item)" />
                </div>
                <div class="right">
                    <div>{{ item.userInfo.nickName }}</div>
                    <div>{{ getTime(item.timestamp) }}</div>
                </div>
            </div>
        </div> -->
        <!-- <div class="footer">
            <v-btn :txt="state.open_btn.txt" :font-size="'17px'" class="btn" :icon="false" :loading="state.btn_loading"
                :disabled="state.open_btn.disabled" v-click-log="state.log_invite_btn_click" @onClick="clickBtn"
                font-weight="600"></v-btn>
        </div>-->
    </div>
</template>
<script setup>
import VBtn from '@/view/iframe/treasure-hunt/components/btn.vue'
import { inviteList, inviteListRefresh } from '@/http/treasure'
import { inject, onMounted, ref } from 'vue'
import Report from "@/log-center/log"

var moment = require('moment')
let state = inject('state')
state.invited_list = []
let page_num = 1
let page_size = 100
let list_end = false

let hoverInvitedUserInfo = ref({});
let showVerticalInvitedList = ref(false);
let timer = null;
let timer1 = null;

state.log_invite_btn_click = {
    businessType: Report.businessType.buttonClick,
    pageSource: Report.pageSource.inviteFriendsPage,
    objectType: Report.objectType.openChestButton,
    redPacketType: Report.redPacketType.treasure,
    shareLinkId: state.invite_code,
    myShareLinkId: state.detail.inviteCopyUrl,
    currentInvitedNum: state.inviteCount,
    postId: state.postId
}

state.log_invite_list_show = {
    businessType: Report.businessType.pageView,
    pageSource: Report.pageSource.beenInvitedPage,
    redPacketType: Report.redPacketType.treasure,
    shareLinkId: state.invite_code,
    myShareLinkId: state.detail.inviteCopyUrl,
    currentInvitedNum: state.inviteCount,
    postId: state.postId
}

onMounted(() => {
    state.btn_loading = false
    list()
})

const invitedItemMouseenter = (params) => {
  if(timer) clearTimeout(timer)
  if(params) {
    hoverInvitedUserInfo.value = params;
  }
}

const invitedListMouseleave = (params) => {
  timer = setTimeout(function(){
    hoverInvitedUserInfo.value = {};
  },600);
}

const moreMouseenter = () => {
  if(timer1) clearTimeout(timer1)
  showVerticalInvitedList.value = true;
}

const moreMouseleave = () => {
  timer1 = setTimeout(function(){
    showVerticalInvitedList.value = false;
  },600);
}

const clickItem = (item) => {
    window.open(`https://twitter.com/${item.userInfo.nickName}`)
}

function handleScroll(e) {
    if (list_end) {
        return
    }
    e = e.target
    if ((e.clientHeight + e.scrollTop) / e.scrollHeight > .8) {
        list_end = true
        inviteListScroll()
    }
}

const list = () => {
    state.inviteListRefresh()
}

// 刷新时调用
state.inviteListRefresh = () => {
    let last_timestamp = 0
    if (state.invited_list.length > 0) {
        last_timestamp = state.invited_list[0].timestamp
    }

    inviteListRefresh({
        params: {
            postId: state.postId,
            lastTimestamp: last_timestamp,
        }
    }).then((res) => {
        if (res.code == 0) {
          handleCommon(res.data)
        }
    })
}

const handleCommon = (data) => {
    state.inviteCount = data.inviteCount
    // if (state.inviteCount > 0) {
    //     state.tabs[1].txt = `invited(${state.inviteCount})`
    // }

    if (data.inviteUsers.length > 0) {
        data.inviteUsers.forEach(item => {
            if (state.invited_list.filter((item2) => { return item2.userInfo.uid == item.userInfo.uid }).length == 0) {
                state.invited_list.push(item)
            }
        })
        state.invited_list = state.invited_list.sort((a, b) => {
            return b.timestamp - a.timestamp
        })

        list_end = false
    } else {
        list_end = false
    }
}

// 滚动
let inviteListScroll = () => {
    // state.invited_list
    let last_timestamp = 0
    let len = state.invited_list.length
    if (len > 0) {
        last_timestamp = state.invited_list[len - 1].timestamp
    }

    inviteList({
        params: {
            inviteCode: state.invite_code,
            postId: state.postId,
            lastTimestamp: last_timestamp,
            pageSize: page_size
        }
    }).then((res) => {
        if (res.code == 0) {

            handleCommon(res.data)
        }
    })
}

const getTime = (timestamp) => {
    let _d1 = moment(new Date().getTime())
    let _d2 = moment(timestamp)
    const plural = (n, s) => {
        let _str = `${n} ${s} ago`
        if (n > 1) {
            _str = `${n} ${s}s ago`
        }
        return _str
    }
    let _d = moment.duration(_d1.diff(_d2)).days()
    if (_d) {
        return plural(_d, 'day')
    }
    let _h = moment.duration(_d1.diff(_d2)).hours()
    if (_h) {
        return plural(_h, 'hour')
    }
    let _m = moment.duration(_d1.diff(_d2)).minutes()
    if (_m) {
        return plural(_m, 'min')
    }
    let _s = moment.duration(_d1.diff(_d2)).seconds()
    return plural(_s, 'sec')
}

async function clickBtn() {
    let _userInfo = await state.checkIsLogin()
    if (!_userInfo) {
        return
    }
    state.btn_loading = true
    state.treasureOpen()
}

</script>
<style lang="scss" scoped>
.content {
    position: absolute;
    bottom: 0px;
    width: 100%;

    .horizontal-invited-wrapper {
      width: 100%;
      padding: 12px 14px;
      box-sizing: border-box;
      display: flex;
      align-items: center;
      font-weight: 400;
      font-size: 12px;
      color: #A7A39F;

      .horizontal-invited-list {
        display: flex;
        align-items: center;
        margin-left: 5px;
        cursor: pointer;

        .invited-item {
          width: 16px;
          height: 16px;
          padding: 0 5px;
          img {
            width: 16px;
            height: 16px;
            border-radius: 50%;
          }
        }
      }

      .more {
        margin-left: 5px;
        cursor: pointer;
      }
    }

    .vertical-invited-wrapper {
      width: 343px;
      height: 308px;
      background: #FFFFFF;
      box-shadow: 0px 4px 14px rgba(0, 0, 0, 0.25);
      border-radius: 16px;
      overflow-y: scroll;
      position: absolute;
      bottom: -316px;
      left: 16px;
      animation: fade-in 0.25s linear forwards;

      .invited-user-info {
        position: static !important;
        border-radius: 0px !important;
        box-shadow: none !important;
        padding: 0 !important;
        animation: none !important;
        .left, .right {
          padding: 9px 0;
        }
        .left {
          padding-left: 16px;
        }
        .right {
          padding-right: 16px;
          box-shadow: inset 0px -1px 0px #F2F2F2;
          box-sizing: border-box;
        }
      }
    }

    .invited-user-info {
      width: 343px;
      padding: 9px 16px;
      box-sizing: border-box;
      background: #FFFFFF;
      box-shadow: 0px 4px 14px rgba(0, 0, 0, 0.25);
      border-radius: 16px;
      position: absolute;
      bottom: -62px;
      left: 16px;
      display: flex;
      justify-content: space-between;
      animation: fade-in 0.25s linear forwards;

      .left {
        display: flex;
        align-items: center;
        .avatar {
          width: 30px;
          height: 30px;
          margin-right: 16px;
          border-radius: 50%;
        }
      }

      .right {
        display: flex;
        justify-content: space-between;
        width: 100%;

        .user-info {
          .name {
            margin-bottom: 5px;
            font-weight: 500;
            font-size: 15px;
          }
          .time {
            font-weight: 400;
            font-size: 12px;
            color: #A9A9A9;
          }
        }

        .channel {
            height: min-content;
            display: flex;
            align-items: center;
            font-weight: 400;
            font-size: 12px;
            color: #A9A9A9;

            .app-icon {
              width: 14px;
              height: 14px;
              margin-right: 4px;
              border-radius: 50%;
            }
        }
      }
    }



    .list {
        background: #fff;
        height: 204px;
        overflow-y: auto;

        .item {
            height: 60px;
            display: flex;
            align-items: center;

            .left {
                width: 58px;
                text-align: center;

                img {
                    cursor: pointer;
                    border-radius: 50px;
                    width: 30px;
                    height: 30px;
                }
            }

            .right {
                flex: 1;
                border-bottom: 1px solid #D9D9D9;
                display: flex;
                align-items: center;
                height: 100%;
                justify-content: space-between;

                div:nth-child(1) {
                    color: #000000;
                    font-weight: 500;
                    font-size: 15px;
                    cursor: pointer;
                }

                div:nth-child(2) {
                    color: #A6A6A6;
                    font-weight: 400;
                    font-size: 12px;
                    margin-right: 17px;

                }
            }
        }
    }

    @keyframes fade-in {
      from {
        opacity: 0;
      }
      to {
        opacity: 1;
      }
    }
}
</style>
