<template>
  <view class="class_select">
    <view class="classList">
      <view
        class="classItem"
        @click="changeClass(item.id)"
        v-for="item in classList"
      >
        <image class="classIcon" :src="item.photo" />
        <view class="text" :class="{ activeText: item.id == classId }">{{
          item.title
        }}</view>
      </view>
    </view>
    <view class="secondClass">
      <view class="secondClassTitle">筛选项</view>
      <view class="secondClassList">
        <view
          class="secondClassItem"
          :class="{ secondClassItemActive: secondClassId.includes(item.id) }"
          v-for="item in secondClassList"
          @click="changeSecondClass(item.id)"
          >{{ item.title }}</view
        >
      </view>
    </view>
    <view class="tips">
      <text class="red">注意：</text>
      <text>
        手艺人可按需发布工时的价格。若不同服务（如快洗与烫发）工时价格存在差异，需分别发布对应工时服务信息；若价格相同，则仅需发布一次工时服务信息，并同时勾选“快洗”和“烫发”两项服务。</text
      >
    </view>
    <view class="fixBottomBtn">
      <view class="btn" @click="handleClose">确定</view>
    </view>
  </view>
</template>

<script>
export default {
  name: "class_select",

  props: {
    classId: {
      type: Number,
    },
    secondClassId: {
      type: Array,
    },
  },
  data() {
    return {
      secondClassList: [],
      classList: [],
    };
  },
  created() {
    this.getClass();
  },
  computed: {},
  watch: {
    secondClassId() {
      if (
        !this.secondClassId ||
        (this.secondClassId && this.secondClassId.length == 0)
      )
        return;
      this.getClass();
      let typeText = "";
      if (this.classId) {
        this.classList.forEach((item) => {
          if (item.id == this.classId) {
            typeText += item.title;
          }
        });
      }
      if (this.secondClassId && this.secondClassId.length > 0) {
        this.secondClassList.forEach((item) => {
          if (this.secondClassId.includes(item.id)) {
            typeText = typeText + " " + item.title;
          }
        });
      }
      this.$emit("changeTypeText", typeText);
    },
  },
  methods: {
    handleClose() {
      let typeText = "";
      if (this.classId) {
        this.classList.forEach((item) => {
          if (item.id == this.classId) {
            typeText += item.title;
          }
        });
      }
      if (this.secondClassId) {
        this.secondClassList.forEach((item) => {
          if (this.secondClassId.includes(item.id)) {
            typeText = typeText + "、" + item.title;
          }
        });
      }
      this.$emit("closeClassSelect", typeText);
    },
    changeClass(id) {
      if (id == this.classId) return;
      this.$emit("changeClass", id);
      this.$emit("changeSecondClass", []);
      this.getSecondClass(id);
    },
    changeSecondClass(id) {
      const ids = this.secondClassId;
      const isCurArray = hasMatchingId(ids, this.secondClassList);
      if (!isCurArray) {
        this.$emit("changeSecondClass", [id]);
      } else {
        if (ids.includes(id)) {
          this.$emit(
            "changeSecondClass",
            ids.filter((item) => item != id)
          );
        } else {
          this.$emit("changeSecondClass", [...ids, id]);
        }
      }
      function hasMatchingId(numberArray, objectArray) {
        // 检查输入是否为有效数组
        if (!Array.isArray(numberArray) || !Array.isArray(objectArray)) {
          return false;
        }
        // 遍历数字数组，检查是否有任何数字匹配对象数组中的id
        return numberArray.some((number) => {
          // 检查对象数组中是否有对象的id与当前数字匹配
          return objectArray.some((obj) => {
            // 确保对象有id属性，并且转换为数字进行比较（处理可能的字符串id）
            return obj && obj.id !== undefined && Number(obj.id) === number;
          });
        });
      }
    },
    getSecondClass(id) {
      const item = this.classList.find((it) => it.id == id);
      this.secondClassList = item.data;
    },
    getClass() {
      this.classList = JSON.parse(uni.getStorageSync("classList"));
      if (!this.classId) {
        this.changeClass(this.classList[0].id);
      } else {
        this.getSecondClass(this.classId);
      }
    },
  },
};
</script>

<style lang="less" scoped>
.class_select {
  width: 100%;
  .classList {
    display: flex;
    align-items: center;
    padding: 28rpx 30rpx 43rpx;
    gap: 14rpx;
    overflow-x: auto;
    .classItem {
      background: #ffffff;
      border-radius: 20rpx;
      width: 140rpx;
      height: 140rpx;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      gap: 20rpx;
      flex-shrink: 0;
      .classIcon {
        width: 64rpx;
        height: 64rpx;
      }
      .text {
        font-size: 24rpx;
        color: #333333;
      }
      .activeText {
        color: #FF4767;
      }
    }
  }
  .secondClass {
    background-color: #fff;
    padding: 30rpx 0 40rpx 30rpx;
    .secondClassTitle {
      font-weight: 500;
      font-size: 30rpx;
      color: #333333;
    }
    .secondClassList {
      display: flex;
      margin-top: 30rpx;
      flex-wrap: wrap;
      gap: 19rpx;
      .secondClassItem {
        width: 214rpx;
        height: 64rpx;
        background: #f5f5f5;
        border-radius: 34rpx;
        display: flex;
        justify-content: center;
        align-items: center;
        border: 2rpx solid transparent;
      }
      .secondClassItemActive {
        border: 1rpx solid #FF4767;
        background: rgba(252, 67, 124, 0.1);
        color: #FF4767;
      }
    }
  }
  .tips {
    background-color: #fff;
    padding: 30rpx 48rpx 30rpx;
    margin-top: 30rpx;
    font-size: 26rpx;
    .red {
      color: #FF4767;
    }
  }
  .fixBottomBtn {
    position: fixed;
    bottom: 0;
    width: 100%;
    height: 166rpx;
    background-color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    padding: 0 24rpx 0 30rpx;
    .btn {
      width: 100%;
      height: 39rpx;
      border: 2rpx solid #FF4767;
      border-radius: 39rpx;
      font-size: 30rpx;
      color: #FF4767;
    }
  }
}
</style>
