<template>
  <div
    class="floorSpace"
    :class="[screenType === 'hor' ? 'horiFloorClass ' : 'verFloorClass ']"
  >
    <div class="buildName" v-show="allBuild.length">
      {{ nowBuildName }}
    </div>
    <div class="leftChange" v-if="screenType == 'hor'">
      <div class="allIndicator">
        <div
          class="showItem"
          v-bind:style="{
            top: selIndicator.index * 16 + '%',
          }"
        >
          <div class="title">{{ selIndicator.name }}</div>
          <div class="ltextCont">
            <div class="value">{{ totalAvgValues }}{{ selIndicator.unit }}</div>
            <div class="name">平均{{ selIndicator.name }}</div>
          </div>
          <div class="other">
            <img class="img" :src="selIndicator.img" />
          </div>
        </div>
        <div
          class="eachItem"
          v-for="(item, index) in allIndicator"
          @click="clickIndicator(index)"
          v-bind:class="{ select: item.id == selIndicator.id }"
        >
          <div class="title">{{ item.name }}</div>
          <!-- <div class="textCont" v-show="item.id == selIndicator.id">
                        <span class="value"
                            >{{ totalAvgValues }}{{ selIndicator.unit }}</span
                        ><br /><span class="name"
                            >平均{{ selIndicator.name }}</span
                        >
                    </div>
                    <img
                        v-show="item.id == selIndicator.id"
                        class="img"
                        :src="selIndicator.img"
                    /> -->
        </div>
      </div>
    </div>
    <div class="topChange" v-if="screenType == 'ver'">
      <div class="allIndicator">
        <div
          class="eachItem"
          v-for="(item, index) in allIndicator"
          @click="clickIndicator(index)"
          v-bind:class="{ select: item.id == selIndicator.id }"
        >
          <span>{{ item.name }}</span>
          <!-- <img
                        class="bar"
                        src="@/assets/image/horImg/lastAllLight.png"
                    /> -->
        </div>
      </div>
      <div class="imageDiv">
        <img :src="selIndicator.verimg" />
      </div>
      <div class="textCont">
        平均<span>{{ selIndicator.name }}</span
        ><span class="value">{{ totalAvgValues }}</span
        ><span>
          {{ selIndicator.unit }}
        </span>
      </div>
    </div>
    <div class="floorWrap" id="floorWrap">
      <div
        class="floor-item"
        v-for="(item, index) in showFloors"
        :key="index"
        v-bind:style="{ height: item.floorHeight + 'px' }"
      >
        <div class="floor-num">
          <span>{{ item.localName }}</span>
        </div>
        <div class="floor-space">
          <div
            class="space-box"
            v-for="(childItem, id) in item.dataSpaces"
            :key="id"
            v-bind:style="{
              width: item.spacewidth + '%',
              height: item.spaceheight + '%',
            }"
          >
            <div
              class="space-name"
              v-bind:style="{
                backgroundColor: selectColor(
                  childItem.avgValues,
                  selIndicatorId,
                  true
                ),
              }"
            >
              {{ childItem.localName }}
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>
<script lang="ts">
import { ref, defineComponent, reactive, toRefs, onMounted } from "vue";
import { queryBuilding, queryFs, queryParam } from "@/api/index";
import useProjectStore from "@/store/useProjectStore";
import { dapingImage } from "@/utils/dapingImage";
import moment from "moment";
import { selectColor } from "@/utils/publicMethod";

export default defineComponent({
  props: {
    screenType: {
      type: String,
    },
    showPing: {
      type: Number,
    },
  },
  setup(props, contx) {
    const {
      floor_co2,
      floor_jiaquan,
      floor_pm25,
      floor_shidu,
      floor_wendu,
      floor_co2_ver,
      floor_jiaquan_ver,
      floor_pm25_ver,
      floor_shidu_ver,
      floor_wendu_ver,
    } = dapingImage;
    const projectStore = useProjectStore();

    let intervalNumber = 3000;

    if (projectStore.projectId === "Pj1101050057") {
      intervalNumber = 10000;
    }

    const allData = reactive({
      selectColor: selectColor,
      timeoutsign: null,
      selIndicator: {},
      selIndicatorId: "", //为了颜色用
      //              温度
      nowIndicatorIndex: null, //现在选中的指标 index
      allIndicator: [
        {
          id: "temp",
          index: 0,
          code: "Tdb",
          name: "温度",
          img: dapingImage.floor_wendu,
          verimg: dapingImage.floor_wendu_ver,
          unit: "℃",
          fixed: 1,
        },
        {
          id: "humidity",
          index: 1,
          code: "RH",
          name: "湿度",
          img: dapingImage.floor_shidu,
          verimg: dapingImage.floor_shidu_ver,
          unit: "%",
          fixed: 0,
        },
        {
          id: "co2",
          index: 2,
          code: "CO2",
          name: "CO₂",
          img: dapingImage.floor_co2,
          verimg: dapingImage.floor_co2_ver,
          unit: "ppm",
          fixed: 0,
        },
        {
          id: "methanal",
          index: 3,
          code: "HCHO",
          name: "甲醛",
          img: dapingImage.floor_jiaquan,
          verimg: dapingImage.floor_jiaquan_ver,
          unit: "mg/m³",
          fixed: 2,
        },
        {
          id: "pm25",
          index: 4,
          code: "PM2d5",
          name: "PM2.5",
          img: dapingImage.floor_pm25,
          verimg: dapingImage.floor_pm25_ver,
          unit: "ug/m³",
          fixed: 0,
        },
      ],
      allBuild: [],
      nowBuildName: "",
      nowBuildPage: 1, //目前是第几个建筑

      allFloor: [],
      firstPageParams: [],
      secondPageParams: [],
      nowPage: 1, //当前哪一屏幕
      pageNum: 0,
      showFloors: [],
      totalAvgValues: null,
      hqueryBuild() {
        queryBuilding()
          .then((res) => {
            var data = (res.data || {}).content || [];
            //debugger;
            if (projectStore.projectId == "Pj3301100002") {
              var filterdata = data.filter((item) => {
                return item.localName == "1#楼";
              });
              allData.allBuild = filterdata;
            } else {
              allData.allBuild = data;
            }

            allData.nowBuildPage = 1;

            allData.fqueryFs();
          })
          .catch((res) => {
            contx.emit("donetowpage"); // 所有建筑切换完毕
            // loading.close();
          });
      },
      fqueryFs() {
        //var loading = this.$loading({ fullscreen: true });
        //debugger;
        var buildId = (allData.allBuild[allData.nowBuildPage - 1] || {}).id; //当前的建筑id
        if (!buildId) {
          return;
        }

        queryFs({
          criteria: {
            projectId: projectStore.projectId,
            buildingId: buildId,
          },
          size: 14, //最多14层
          page: 1,
          orders: [
            {
              column: "floorSequenceId",
              asc: true,
            },
          ],
        })
          .then((res) => {
            // loading.close();
            var allFloor = res.data.content || [];
            allFloor = allFloor.filter(function (item) {
              return item.spaceNum > 0;
            });

            //如果该建筑的所有楼层 没有空间 则请求下一个建筑
            if (allFloor.length == 0) {
              //换下一栋楼
              allData.nowBuildPage = allData.nowBuildPage + 1;
              if (allData.nowBuildPage > allData.allBuild.length) {
                contx.emit("donetowpage"); // 所有建筑切换完毕
                return;
              }
              allData.fqueryFs();
              return;
            }
            allData.nowBuildName =
              allData.allBuild[allData.nowBuildPage - 1].localName;

            allData.allFloor = allFloor;
            var allFloorNum = allFloor.length;
            //如果超过7层 就显示两屏幕 第一屏 firstPageNum
            //如果超过7层 就显示两屏幕 第二屏 secondPageNum
            var firstPageNum, secondPageNum;
            if (allFloorNum <= 7) {
              firstPageNum = allFloorNum;
              secondPageNum = 0;
              allData.pageNum = 1;
            } else {
              firstPageNum = Math.ceil(allFloorNum / 2);
              secondPageNum = Math.floor(allFloorNum / 2);
              allData.pageNum = 2;
            }

            var firstMaxSpace = allData.floorHandle(firstPageNum); //第一屏 一层最多空间
            var sendMaxSpace = allData.floorHandle(secondPageNum);
            var firstPageFloors = allFloor.slice(0, firstPageNum); //第一屏 所有楼层
            var secondPageFloors = allFloor.slice(firstPageNum); //第二屏 所有楼层
            //第一屏的参数 第二屏的参数
            allData.firstPageParams = firstPageFloors.map((item) => {
              var obj = {};
              obj.id = item.id;
              obj.projectId = projectStore.projectId;
              obj.spaceNum = firstMaxSpace; //最多空间数
              return obj;
            });

            allData.secondPageParams = secondPageFloors.map((item) => {
              var obj = {};
              obj.id = item.id;
              obj.projectId = projectStore.projectId;
              obj.spaceNum = sendMaxSpace;
              return obj;
            });

            allData.nowIndicatorIndex = 0;
            //debugger;
            allData.getTimeFloorParam(intervalNumber);
          })
          .catch(function (res) {
            // loading.close();
            allData.nowBuildPage = allData.nowBuildPage + 1;
            if (allData.nowBuildPage > allData.allBuild.length) {
              contx.emit("donetowpage"); // 所有建筑切换完毕
              return;
            }
            allData.fqueryFs();
          });
      },
      toplay() {
        allData.getTimeFloorParam(500);
      },
      tostop() {
        clearTimeout(allData.timeoutsign);
      },
      getTimeFloorParam(time) {
        //第一屏的参数 第二屏的参数
        var floorparam =
          allData.nowPage == 1
            ? allData.firstPageParams
            : allData.secondPageParams;

        allData
          .fqueryParam(floorparam)
          .then(() => {
            if (projectStore.stopSign) {
              return;
            }
            allData.timeoutsign = setTimeout(() => {
              //debugger;
              allData.nowIndicatorIndex = allData.nowIndicatorIndex + 1; //湿度等指标的轮询变化
              if (allData.nowIndicatorIndex == 5) {
                //如果指标轮询结束 通知切换
                if (allData.pageNum == allData.nowPage) {
                  allData.nowPage = 1;
                  if (allData.nowBuildPage == allData.allBuild.length) {
                    contx.emit("donetowpage");
                    clearTimeout(allData.timeoutsign);
                  } else {
                    //换下一个建筑
                    allData.nowBuildPage = allData.nowBuildPage + 1;
                    allData.fqueryFs();
                  }
                  return;
                }
                //如果是两页 并且nowPage是第一页
                if (allData.pageNum == 2 && allData.nowPage == 1) {
                  allData.nowPage = 2;
                  allData.nowIndicatorIndex = 0;
                }
              }
              allData.getTimeFloorParam(intervalNumber);
            }, time);
          })
          .catch(() => {
            //debugger;
          });
      },
      fqueryParam(floorparam) {
        var endTime = moment();
        var startTime = moment().subtract(30, "minutes");
        var startStr = startTime.format("YYYYMMDDHHmmss");
        var endStr = endTime.format("YYYYMMDDHHmmss");
        var newv = allData.nowIndicatorIndex;
        //debugger;
        allData.selIndicator = allData.allIndicator[newv];
        var param = allData.selIndicator.code;

        return queryParam(endStr, startStr, param, floorparam)
          .then((res) => {
            //loading.close();
            //debugger;
            var showFloors = (res.data.data || {}).floors || [];
            allData.totalAvgValues = res.data.data.avgValues || null;
            allData.totalAvgValues &&
              (allData.totalAvgValues = allData.totalAvgValues.toFixed(
                allData.selIndicator.fixed
              ));
            var wrapHeight =
              document.getElementById("floorWrap") &&
              document.getElementById("floorWrap").offsetHeight;
            showFloors.forEach((ele) => {
              var filterFloorarr = allData.allFloor.filter((item) => {
                return item.id == ele.id;
              });
              var filterFloor = filterFloorarr[0] || {};
              ele.name = filterFloor.name;
              ele.localId = filterFloor.localId;
              ele.localName = filterFloor.localName;
              var dataSpacesNum = (ele.dataSpaces || []).length;
              var floorParam = allData.spaceHandle(dataSpacesNum); //一行的个数

              ele.spacewidth = 100 / floorParam.lineNum;
              ele.spaceheight = 100 / floorParam.floorline; //每一行的高度
              ele.floorHeight = wrapHeight / showFloors.length; //每一层的高度
            });
            allData.showFloors = showFloors;
            allData.selIndicatorId = allData.selIndicator.id;
          })
          .catch((err) => {
            //debugger;
          });
      },
      spaceHandle(spaceNum) {
        //返回一层 的每一行 几个房间
        var lineNum = spaceNum; //一行的房间数
        var floorline = Math.ceil(spaceNum / 14); //20-30 3排 30-40个 4排 所以一排10个
        lineNum = Math.ceil(spaceNum / floorline);
        return { lineNum, floorline };
        //debugger;
      },
      floorHandle(floorNum) {
        //返回一层 最多多少房间
        var maxFloorSpace = 28; //一层 最多显示房间数
        // switch (floorNum) {
        //     case 1:
        //         maxFloorSpace = 160;
        //         break;
        //     case 2:
        //         maxFloorSpace = 80;
        //         break;
        //     case 3:
        //         maxFloorSpace = 50;
        //         break;
        //     case 4:
        //         maxFloorSpace = 30;
        //         break;
        //     case 5:
        //     case 6:
        //     case 7:
        //         maxFloorSpace = 20;
        //         break;
        // }
        return maxFloorSpace;
      },
    });

    onMounted(() => {
      allData.nowPage = 1;
      allData.hqueryBuild();
      //console.log("floorspace-mounted");
    });
    return { ...toRefs(allData) };
  },
});
</script>

<style lang="scss" scoped>
.floorSpace {
  width: 100%;
  height: 100%;
  display: flex;
  position: relative;
  border-radius: 16px;
  .buildName {
    position: absolute;
    top: -40px;
    left: -40px;
    background: linear-gradient(
      90deg,
      rgba(131, 195, 255, 0.16) 0%,
      rgba(131, 195, 255, 0) 100%
    );
    height: 46px;
    line-height: 46px;
    font-size: 20px;
    //min-width: 145px;
    padding: 0 20px;
    color: #f7ecdb;
    box-sizing: border-box;
  }
}

.topChange {
  height: 220px;
  width: 100%;
  margin: 0 auto;
  background: #ffffff;
  position: relative;
  background: rgba(149, 162, 194, 0.1);
  backdrop-filter: blur(20px);
  border-radius: 20px;

  .allIndicator {
    position: relative;
    padding-top: 36px;
    padding-bottom: 36px;
    display: flex;
    align-items: center;
    justify-content: center;
    .eachItem {
      cursor: pointer;
      font-size: 28px;
      font-weight: 600;
      color: #9b98ad;
      margin-right: 40px;
      display: flex;
      flex-direction: column;
      align-items: center;
      width: 90px;

      .bar {
        width: 80px;
      }
      &.select {
        color: #f7e6cd;
        background-image: url("@/assets/image/horImg/lastAllLight.png");
        background-repeat: no-repeat;
        background-position: center bottom;
        background-size: 100%;
        padding-bottom: 7px;
        // .bar {
        //     // background: #46ccf6;
        // }
      }
    }
  }
  .imageDiv {
    height: 32px;
    margin: 0 32px;
    font-size: 0;
    text-align: center;
    img {
      font-size: 0;
      height: 100%;
    }
  }
  .textCont {
    color: #f7e6cd;
    font-size: 20px;
    font-weight: 600;
    text-align: center;
    padding-top: 16px;
    .value {
      margin-left: 6px;
    }
  }
}

.leftChange {
  height: 100%;
  width: 154px;
  box-sizing: border-box;
  padding: 65px 0 20px;
  margin: 0 auto;
  position: relative;
  //min-height: 730px;

  .allIndicator {
    // padding-top: 65px;
    //padding-bottom: 20px;
    // display: flex;
    // align-items: center;
    // justify-content: center;
    position: relative;
    height: 100%;
    .showItem {
      transition: all 400ms linear;
      // height: 342px;
      height: 36%;
      box-sizing: border-box;
      padding-top: 20px;
      position: absolute;
      top: 0;
      left: 16px;
      width: 120px;
      // display: flex;
      // flex-direction: column;
      background-color: rgba(100, 108, 130, 0.2);
      backdrop-filter: blur(10px);
      background-image: url("@/assets/image/horImg/twoLight.png");
      background-repeat: no-repeat;
      background-position: center top;
      background-size: 100%;
      border-radius: 10px;
      text-align: center;
      .other {
        height: 60%;
        padding: 14px 0;
        box-sizing: border-box;
        font-size: 0;
        .img {
          height: 100%;
          padding: 0;
          margin: 0;
        }
      }
      .title {
        color: #f7ecdb;
        font-size: 24px;
        //font-size: 1.3vw;
        height: 20%;
        font-weight: 600;
      }
      .ltextCont {
        color: #f7ecdb;
        line-height: 23px;
        height: 20%;

        .value {
          font-weight: 700;
          font-size: 20px;
          font-family: PersagyBold;
        }
        .name {
          font-weight: 400;
          font-size: 14px;
        }
      }
    }
    .eachItem {
      cursor: pointer;
      //margin-bottom: 56px;
      padding-top: 20px;
      // height: 90px;
      height: 16%;
      box-sizing: border-box;
      text-align: center;
      font-family: PingFang SC;
      .title {
        color: #9b98ad;
        font-size: 24px;
        font-weight: 600;
      }
      &.select {
        // height: 350px;
        height: 36%;
      }
    }
    .eachItem:last-child {
      margin-bottom: 0;
    }
  }
}

.floorWrap {
  flex: 1;
  margin: 0 auto;
  // background: #ffffff;
  border-top-right-radius: 16px;
  border-bottom-right-radius: 16px;

  box-sizing: border-box;
  .floor-item {
    display: flex;
    padding: 18px 20px 18px 0;
    box-sizing: border-box;
    // background: linear-gradient(
    //     186deg,
    //     rgba(50, 129, 246, 0.1) 6.16%,
    //     rgba(50, 129, 246, 0) 81.03%
    // );
  }

  .floor-num {
    display: flex;
    justify-content: center;
    align-items: center;
    font-family: PersagyBold;
    font-size: 36px;
    font-weight: bold;
    line-height: 43px;
    color: #f7ecdb;
    width: 90px;
    flex-shrink: 0;
  }
  .floor-space {
    display: flex;
    flex: 1;
    flex-wrap: wrap;
    font-size: 14px;
    .space-box {
      padding: 4px;
      box-sizing: border-box;
      .space-name {
        display: flex;
        justify-content: center;
        align-items: center;
        //height: 86px;
        height: 100%;
        min-width: 20px;
        border-radius: 8px;
        color: #f7ecdb;
        backdrop-filter: blur(5px);
        background: rgba(34, 139, 81, 0.76);
        text-align: center;
        padding: 0 8px;
        box-sizing: border-box;
        font-weight: 500;
        font-family: Persagy;
      }
    }
  }
}
.verFloorClass {
  display: block;
  .floorWrap {
    padding-top: 14px;
    height: calc(100% - 220px);
  }
  .buildName {
    top: -55px;
  }
}
</style>