<script setup>
import { ref, onMounted } from "vue";
import IconButton from "@/components/IconButton.vue";
import SButton from "@/components/SButton.vue";
import ScreenHint from "@/components/ScreenHint.vue";
import BowData from "@/components/BowData.vue";
import { wxShare } from "@/util";
import { directionAdjusts } from "@/constants";
const props = defineProps({
  onClose: {
    type: Function,
    default: () => {},
  },
  total: {
    type: Number,
    default: 0,
  },
  rowCount: {
    type: Number,
    default: 0,
  },
  result: {
    type: Object,
    default: () => ({}),
  },
  tipSrc: {
    type: String,
    default: "",
  },
});
const showPanel = ref(true);
const showComment = ref(false);
const showBowData = ref(false);
const finished = ref(false);
const totalRing = ref(0);
const closePanel = () => {
  showPanel.value = false;
  setTimeout(() => {
    props.onClose();
  }, 300);
};
onMounted(() => {
  if (props.result.arrows) {
    totalRing.value = props.result.arrows.reduce(
      (last, next) => last + next.ring,
      0
    );
  }
  finished.value =
    props.result.arrows && props.result.arrows.length === props.total;
});
// setTimeout(() => {
//   showPanel.value = true;
// }, 300);
</script>

<template>
  <view v-if="result.arrows" class="container">
    <view :class="['container-header', showPanel ? 'scale-in' : 'scale-out']">
      <image :src="tipSrc" mode="widthFix" />
      <image src="../static/finish-frame.png" mode="widthFix" />
      <text
        >完成<text class="gold-text">{{ result.arrows.length }}</text
        >箭，获得<text class="gold-text">{{ result.arrows.length }}</text
        >点经验</text
      >
    </view>
    <view
      class="container-content"
      :style="{ transform: `translateY(${showPanel ? '0%' : '100%'})` }"
    >
      <view>
        <text>本局成绩（共{{ totalRing }}环）：</text>
        <button @click="() => (showBowData = true)">
          <text>查看靶纸</text>
          <image
            src="../static/enter-arrow-blue.png"
            mode="widthFix"
            :style="{ width: '20px' }"
          />
        </button>
      </view>
      <view :style="{ gridTemplateColumns: `repeat(${rowCount}, 1fr)` }">
        <view v-for="(score, index) in result.arrows" :key="index">
          {{ score.ring }}<text>环</text>
        </view>
      </view>
      <view>
        <block v-if="finished">
          <IconButton
            name="分享"
            src="../static/share.png"
            :onClick="wxShare"
          />
          <IconButton
            name="教练点评"
            src="../static/review.png"
            :onClick="() => (showComment = true)"
          />
        </block>
        <SButton
          :width="finished ? '70vw' : 'calc(100vw - 20px)'"
          :rounded="30"
          :onClick="closePanel"
          >{{ finished ? "完成" : "重新挑战" }}</SButton
        >
      </view>
    </view>
    <ScreenHint
      :show="showComment"
      :onClose="() => (showComment = false)"
      mode="tall"
    >
      <view class="coach-comment">
        <text>
          您本次练习取得了<text :style="{ color: '#fed847' }">{{
            totalRing
          }}</text
          >环的成绩，所有箭支上靶后的平均点间距为<text
            :style="{ color: '#fed847' }"
            >{{ Number(result.average_distance.toFixed(2)) }}</text
          >，{{
            result.spreadEvaluation === "Dispersed"
              ? "还需要持续改进。"
              : "成绩优秀。"
          }}
        </text>
        <text :style="{ marginTop: '12px' }"
          >针对您本次的练习，{{
            result.spreadEvaluation === "Dispersed"
              ? "我们建议您充分练习推弓、靠位以及撒放动作一致性，以持续提高成绩。"
              : totalRing >= 100
              ? "我们建议您继续保持即可。"
              : `我们建议您将设备的瞄准器${
                  directionAdjusts[result.adjustmentHint]
                }调整。`
          }}</text
        >
      </view>
    </ScreenHint>
    <BowData
      :arrows="result.arrows"
      :show="showBowData"
      :onClose="() => (showBowData = false)"
    />
  </view>
</template>

<style scoped>
.container {
  width: 100vw;
  height: 100vh;
  position: fixed;
  top: 0;
  left: 0;
  background-color: rgba(0, 0, 0, 0.8);
  z-index: 5;
}
.container-header {
  margin-top: 20vh;
  display: flex;
  flex-direction: column;
  align-items: center;
  opacity: 0;
}
.container-header > text:last-child {
  color: #fff;
  text-align: center;
  margin-top: -85px;
}
.container-content {
  width: calc(100vw - 20px);
  background-color: #fff;
  position: absolute;
  bottom: 0;
  border-top-left-radius: 10px;
  border-top-right-radius: 10px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  padding: 15px 10px;
  transition: all 0.3s ease;
  transform: translateY(0);
}
.container-content > view:first-child {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.container-content > view:first-child > text:first-child {
  color: #000;
}
.container-content > view:first-child > button {
  display: flex;
  align-items: center;
  color: #287fff;
  font-size: 14px;
}
.container-content > view:nth-child(2) {
  display: grid;
  row-gap: 10px;
  column-gap: 5px;
  justify-content: flex-start;
  margin: 10px 0;
}
.container-content > view:nth-child(2) > view {
  background: linear-gradient(#fbfbfb, #f5f5f5);
  border: 1px solid #e5e5e5;
  border-radius: 5px;
  text-align: center;
  line-height: 27px;
  color: #333333;
}
.container-content > view:nth-child(2) > view > text {
  font-size: 12px;
  color: #666666;
  margin-left: 3px;
}
.container-content > view:nth-child(3) {
  width: 100%;
  display: flex;
  justify-content: space-around;
}
.gold-text {
  color: #fed847;
  font-size: 20px;
  margin: 0 2px;
}
.coach-comment {
  display: flex;
  flex-direction: column;
  font-size: 14px;
  margin-top: -20px;
}
</style>
