<script setup>
import Live from '../components/Live.vue'
import LivePlayback from '../components/LivePlayback.vue'
import { getTest, getRecord } from '../api'
import { useCountdown } from '@/composables/useCountdown'

const props = defineProps({
  isView: { type: Boolean, default: false },
})
const route = useRoute()

const { timeLeft, formattedTime, stop, reset } = useCountdown({
  // 倒计时结束
  onEnd: () => {
    live.value?.stop()
  },
})
const live = ref(null)

const detail = ref(null)
provide('detail', detail)

const duration = computed(() => {
  return parseInt(detail.value?.duration) * 60 || 0
})
const isLocalUpload = computed(() => {
  return detail.value?.upload_way == 2
})

async function fetchInfo() {
  const res = await getTest({ id: route.query.id })
  detail.value = res.data.detail
  timeLeft.value = duration.value
}
watchEffect(() => {
  fetchInfo()
})

// 商品卖点
const hotList = computed(() => {
  return detail.value?.live_speech.selling_point.split(';')
})
// 营销活动
const actList = computed(() => {
  return detail.value?.live_speech.marketing_campaign.split(';')
})

// 直播记录数据
const record = ref(null)
provide('record', record)

// 直播数据
const stats = computed(() => {
  const result = { totalViewers: 0, peakViewers: 0, totalGifts: 0, totalLikes: 0, totalGiftViewers: 0 }
  return Object.assign(result, record.value?.live_info.stats)
})

const fetchRecord = async () => {
  const res = await getRecord({ id: route.query.record_id })
  record.value = { ...res.data.detail, live_info: JSON.parse(res.data.detail.live_info) }
}
onMounted(() => {
  props.isView && fetchRecord()
})
</script>

<template>
  <AppCard title="直播练习" full>
    <div class="live-row">
      <div class="live-col">
        <template v-if="isView">
          <LivePlayback :record="record" v-if="record"></LivePlayback>
        </template>
        <template v-else>
          <Live
            ref="live"
            :isLocalUpload="isLocalUpload"
            :onStart="() => reset(duration)"
            :onStop="stop"
            v-if="detail" />
        </template>
      </div>
      <div class="live-col" style="flex: 1">
        <h2 class="h2-title">直播话术</h2>
        <div class="live-talk-content">
          <p class="t1">商品引入</p>
          <p>
            <span>开场互动</span>
            亲爱的家人们，欢迎来到默认主播的直播间呀！今天可是有超棒的宝贝要给大家分享哦，大家有没有对电脑硬件感兴趣的呀？快来跟主播互动一下吧！
          </p>
          <p>
            <span>引出话题</span>
            说到电脑，那可是我们生活和工作中不可或缺的一部分呢。大家平时使用电脑的时候有没有遇到过卡顿、运行不流畅的情况呀？今天我带来的这款
            1DIY 兼容机，就能完美解决这些问题哦！
          </p>
          <p>
            <span>引出商品</span>
            这款 1DIY
            兼容机，它可是经过精心设计和配置的呢。它能够满足大家各种不同的使用需求，无论是日常办公、学习，还是玩大型游戏，都能轻松应对。
          </p>
          <p>
            <span>目标人群场景锁定</span>
            对于那些对电脑性能有较高要求的朋友们，这款兼容机绝对是你们的最佳选择。比如那些经常需要处理大量数据、进行图形设计的专业人士，或者是喜欢玩高画质游戏的游戏爱好者们，它都能给你们带来超棒的体验哦！
          </p>
          <p class="t1">商品讲解</p>
          <p>
            <span>产品卖点讲解</span>
            咱们这款兼容机的第一个卖点就是它的强大性能。它配备了最新的处理器和高性能显卡，运行速度那叫一个快，让你在使用过程中感受不到丝毫卡顿。而且内存和硬盘的容量也非常大，能够存储大量的文件和数据。第二个卖点就是它的兼容性非常好，能够兼容各种软件和硬件，不用担心出现不兼容的情况。
          </p>
          <p>
            <span>观众互动</span>
            家人们，你们觉得什么样的电脑配置才是最适合自己的呢？快在评论区留言告诉主播哦，主播会根据大家的需求给大家更详细的介绍。
          </p>
          <p class="t1">引导转化</p>
          <p>
            <span>催单话术</span>
            这么好的一款兼容机，大家是不是已经心动啦？别再犹豫啦，赶紧下单把它带回家吧！现在下单还有特别的优惠活动哦，错过可就太可惜啦！
          </p>
          <p>
            <span>强调购买方式</span>
            购买的方式非常简单哦，大家只需要点击屏幕下方的购买按钮，按照提示填写好收货信息就可以啦。我们会尽快安排发货，让大家尽快收到心仪的电脑。
          </p>
          <p>
            <span>结尾互动</span>
            好啦，今天的直播就到这里啦，感谢家人们的陪伴和支持。如果大家还有什么问题或者建议，都可以随时在直播间里留言哦。下次直播我们还会有更多惊喜好物等着大家，再见啦，家人们！
          </p>
        </div>
      </div>
      <div class="live-col" style="width: 350px">
        <div class="live-col-box" v-if="isView">
          <h2 class="h2-title">直播数据</h2>
          <div class="live-data">
            <dl>
              <dt>观众总人数：</dt>
              <dd>{{ stats.totalViewers }}</dd>
            </dl>
            <dl>
              <dt>最高峰人数：</dt>
              <dd>{{ stats.peakViewers }}</dd>
            </dl>
            <dl>
              <dt>点赞数：</dt>
              <dd>{{ stats.totalLikes }}</dd>
            </dl>
            <dl>
              <dt>刷礼物人数：</dt>
              <dd>{{ stats.totalGiftViewers }}</dd>
            </dl>
            <dl>
              <dt>刷礼物总数：</dt>
              <dd>{{ stats.totalGifts }}</dd>
            </dl>
          </div>
        </div>
        <div class="live-col-box" v-else>
          <h2 class="h2-title">倒计时</h2>
          <h3 class="live-time">{{ formattedTime }}</h3>
        </div>
        <div class="live-col-box">
          <h2 class="h2-title">商品卖点</h2>
          <ul class="live-tag live-tag__hot">
            <li v-for="item in hotList" :key="item">{{ item }}</li>
          </ul>
        </div>
        <div class="live-col-box">
          <h2 class="h2-title">营销活动</h2>
          <ul class="live-tag live-tag__act">
            <li v-for="item in actList" :key="item">{{ item }}</li>
          </ul>
        </div>
      </div>
    </div>
  </AppCard>
</template>

<style lang="scss">
.live-row {
  height: 100%;
  display: flex;
  gap: 20px;
}
.live-col {
  padding: 20px;
  border-radius: 10px;
  border: 1px solid #eee;
  .h2-title {
    margin-top: 0;
  }
}
.live-tag {
  margin: 20px 0;
  background-color: #eee;
  border-radius: 10px;
  padding: 20px;
  gap: 10px;
  li {
    line-height: 30px;
    background-color: #fff;
    text-align: center;
    border: 1px solid rgba(105, 113, 140, 0.12);
  }
}
.live-data {
  padding: 0 0 20px 10px;
  dl {
    margin: 10px 0;
    display: flex;
  }
  dt {
    font-weight: bold;
  }
}
.live-time {
  height: 140px;
  font-size: 72px;
  text-align: center;
  color: var(--main-color);
}
.live-tag__hot {
  display: flex;
  flex-wrap: wrap;
  li {
    flex: 0 0 calc(50% - 10px);
  }
}
.live-tag__act {
  li {
    margin: 10px 0;
  }
}
.live-talk-content {
  max-height: 660px;
  overflow-y: auto;
  p {
    margin: 10px 0;
    line-height: 24px;
  }

  .t1 {
    padding: 0 5px;
    display: inline-block;
    background-color: rgba(25, 102, 255, 0.08);
    color: rgb(25, 102, 255);
    border: 1px solid transparent;
  }
  span {
    padding: 0 5px;
    color: rgb(25, 102, 255);
    border: 1px solid rgba(25, 102, 255, 0.12);
  }
}
</style>
