<script setup>
import { ref, onMounted } from "vue";
import Container from "@/components/Container.vue";
import SModal from "@/components/SModal.vue";
import EditOption from "@/components/EditOption.vue";
import PointRecord from "@/components/PointRecord.vue";
import ScrollList from "@/components/ScrollList.vue";
import { getPointBookListAPI } from "@/apis";

const bowType = ref({});
const distance = ref(0);
const bowtargetType = ref({});
const showModal = ref(false);
const selectorIndex = ref(0);
const list = ref([]);

const onListLoading = async (page) => {
  const result = await getPointBookListAPI(
    page,
    bowType.value.id,
    distance.value,
    bowtargetType.value.id
  );
  if (page === 1) {
    list.value = result;
  } else {
    list.value = list.value.concat(result);
  }
  return result.length;
};

const openSelector = (index) => {
  selectorIndex.value = index;
  showModal.value = true;
};

const onSelectOption = (itemIndex, value) => {
  if (itemIndex === 0) {
    bowType.value = value.name === bowType.value.name ? {} : value;
  } else if (itemIndex === 1) {
    distance.value = value === distance.value ? 0 : value;
  } else if (itemIndex === 2) {
    bowtargetType.value = value.name === bowtargetType.value.name ? {} : value;
  }
  showModal.value = false;
  onListLoading(1);
};
const toDetailPage = (id) => {
  uni.navigateTo({
    url: `/pages/point-book-detail?id=${id}`,
  });
};
</script>

<template>
  <Container
    :bgType="2"
    bgColor="#F5F5F5"
    :whiteBackArrow="false"
    title="计分记录"
  >
    <view class="container">
      <view class="selectors">
        <view @click="() => openSelector(0)">
          <text :style="{ color: bowType.name ? '#000' : '#999' }">{{
            bowType.name || "请选择"
          }}</text>
          <image src="../static/arrow-grey.png" mode="widthFix" />
        </view>
        <view @click="() => openSelector(1)">
          <text :style="{ color: distance ? '#000' : '#999' }">{{
            distance ? distance + " 米" : "请选择"
          }}</text>
          <image src="../static/arrow-grey.png" mode="widthFix" />
        </view>
        <view @click="() => openSelector(2)">
          <text :style="{ color: bowtargetType.name ? '#000' : '#999' }">{{
            bowtargetType.name || "请选择"
          }}</text>
          <image src="../static/arrow-grey.png" mode="widthFix" />
        </view>
      </view>
      <view class="point-records">
        <ScrollList :onLoading="onListLoading">
          <view
            v-for="(item, index) in list"
            :key="index"
            @click="() => toDetailPage(item.id)"
          >
            <PointRecord :data="item" />
          </view>
          <view class="no-data" v-if="list.length === 0">暂无数据</view>
        </ScrollList>
      </view>
      <SModal
        :show="showModal"
        :noBg="true"
        :onClose="() => (showModal = false)"
      >
        <view class="selector">
          <button hover-class="none" @click="() => (showModal = false)">
            <image src="../static/close-grey.png" mode="widthFix" />
          </button>
          <EditOption
            v-show="selectorIndex === 0"
            :itemIndex="0"
            :expand="true"
            :noArrow="true"
            :onSelect="onSelectOption"
            :value="bowType.name"
          />
          <EditOption
            v-show="selectorIndex === 1"
            :itemIndex="1"
            :expand="true"
            :noArrow="true"
            :onSelect="onSelectOption"
            :value="distance + ''"
          />
          <EditOption
            v-show="selectorIndex === 2"
            :itemIndex="2"
            :expand="true"
            :noArrow="true"
            :onSelect="onSelectOption"
            :value="bowtargetType.name"
          />
        </view>
      </SModal>
    </view>
  </Container>
</template>

<style scoped>
.container {
  width: 100%;
  height: 100%;
}
.selectors {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 15px;
  margin-top: 10px;
}
.selectors > view {
  display: flex;
  align-items: center;
  justify-content: space-between;
  background-color: #fff;
  height: 55px;
  border-radius: 12px;
  color: #333;
  font-size: 13px;
  width: 26vw;
}
.selectors > view:last-child {
  width: 34vw;
}
.selectors > view > text {
  width: calc(100% - 11vw);
  text-align: center;
  margin-left: 3vw;
}
.selectors > view > image {
  width: 5vw;
  margin-right: 3vw;
}
.selector {
  padding: 10px;
  background-color: #fff;
  border-radius: 10px;
  position: relative;
}
.selector > button {
  position: absolute;
  top: 0;
  right: 0;
}
.selector > button > image {
  width: 40px;
}
.point-records {
  margin: 0 15px;
  margin-top: 10px;
  height: calc(100% - 80px);
}
.no-data {
  width: 100%;
  height: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  color: #999999;
  font-size: 14px;
}
</style>
