<template>
    <div id="compressor3D" style="width: 100%; height: 100%; position: absolute; overflow: hidden"></div>
    <div v-show="monitorDataGroupFlag == 1" id="compressorCss3D"  class="threejs-Object-CSS compressorCss3D-box"
        style="width: 100%; height: 100%; position: absolute; pointer-events: none; overflow: hidden; z-index: 2; top: 0px; left: 0px">
        <!-- <a-spin :spinning="loading" /> -->
        <div  v-for="(groupNum, index) in monitorDataGroupNum" :key="index" class="modal-monitor">
          <fourBorderBg :class="`kyj${groupNum}`" :id="`nitrogenMonitor${groupNum}`">
            <div class="title">{{ groupNum }}号空压机 </div>
            <div class="monitor-item">
              <span class="monitor-title">机头温度:</span>
              <span class="monitor-val"><span class="val">{{ monitorData[`PRE${groupNum}_CPR_HeadTemp`] ?
                formatNum(monitorData[`PRE${groupNum}_CPR_HeadTemp`]) : '-' }}</span><span class="unit">℃</span></span>
            </div>
            <div class="monitor-item">
              <span class="monitor-title">冷却温度:</span>
              <span class="monitor-val"><span class="val">{{ monitorData[`PRE${groupNum}_CPR_CoolantTemp`] ?
                formatNum(monitorData[`PRE${groupNum}_CPR_CoolantTemp`]) : '-' }}</span><span class="unit">℃</span></span>
            </div>
            <div class="monitor-item">
              <span class="monitor-title">排气温度:</span>
              <span class="monitor-val"><span class="val">{{ monitorData[`PRE${groupNum}_CPR_ExhaustTemp`] ? formatNum(monitorData[`PRE${groupNum}_CPR_ExhaustTemp`]) : '-' }}</span><span class="unit">℃</span></span>
            </div>
            <div class="signal-item">
              <div class="signal"><span class="monitor-title">运行信号</span><span
                  :class="{ 'signal-round': true, 'signal-round-run': monitorData[`PRE${groupNum}_MOT_Running`] == '1', 'signal-round-gry': monitorData[`PRE${groupNum}_MOT_Running`] != '1' }"></span>
              </div>
              <div class="signal"><span class="monitor-title">故障信号</span><span
                  :class="{ 'signal-round': true, 'signal-round-warning': monitorData[`PRE${groupNum}_MOT_Fault`] == '1', 'signal-round-gry': monitorData[`PRE${groupNum}_MOT_Fault`] != '1' }"></span>
              </div>
            </div>
          </fourBorderBg>
          <fourBorderBg :class="`cqg${groupNum}`" :id="`cqgMonitor${groupNum}`">
            <div class="title">{{ groupNum }}号储气罐 </div>
            <div class="monitor-item">
              <span class="monitor-title">气囊温度:</span>
              <span class="monitor-val"><span class="val">{{ monitorData[`PRE${groupNum}_VLS_Temp`] ?
                formatNum(monitorData[`PRE${groupNum}_VLS_Temp`]) : '-' }}</span><span class="unit">℃</span></span>
            </div>
            <!-- <div class="monitor-item">
              <span class="monitor-title">气囊压力<span class="unit"></span>:</span>
              <span class="monitor-val"><span class="val">{{ monitorData[groupNum - 1] && monitorData[groupNum - 1]['airReceiverPress'] ?
                monitorData[groupNum - 1]['airReceiverPress'] : '-' }}</span><span class="unit">Mpa</span></span>
            </div>
            <div class="monitor-item">
              <span class="monitor-title">气囊流量<span class="unit"></span>:</span>
              <span class="monitor-val"><span class="val">{{ monitorData[groupNum - 1] && monitorData[groupNum - 1]['airReceiverFlow'] ?
                monitorData[groupNum - 1]['airReceiverFlow'] : '-' }}</span><span class="unit">m³/k</span></span>
            </div> -->
          </fourBorderBg>
        </div>
    </div>
    <div class="nitrogen-home">
      <!-- <div style="position: absolute; color: #fff; top: 30px; pointer-events: auto; display: flex;">
        <span class="tab-button-box" :class="{'tab-button-box-active': monitorDataGroupFlag == 1}" @click="setMonitorGroupNum(monitorDataGroupNum1, 1)">压风系统1</span>
        <span class="tab-button-box" :class="{ 'tab-button-box-active': monitorDataGroupFlag == 2 }" @click="setMonitorGroupNum(monitorDataGroupNum2, 2)">压风系统2</span>
      </div> -->
      <div class="total-data">
        <div class="vent-flex-row">
          <div class="item">总流量(m³/min)：<span class="val">{{ monitorData[`PreSys_TotalOutPipeFlow${monitorDataGroupFlag}`] ? formatNum(monitorData[`PreSys_TotalOutPipeFlow${monitorDataGroupFlag}`]) : '-' }}</span></div>
          <div class="item">总压力(bar)：<span class="val">{{ monitorData[`PreSys_TotalOutPipePre${monitorDataGroupFlag}`] ? formatNum(monitorData[`PreSys_TotalOutPipePre${monitorDataGroupFlag}`]): '-' }}</span></div>
        </div>
        <div class="" style="margin-left: 30px; margin-top: 10px;">
          <div style="color: red;">总流量异常</div>
          <div style="color: red;">总压力异常</div>
        </div>
      </div>
      <div class="nitrogen-container">
        <div v-if="monitorData['netStatus'] == 0" class="device-state">网络断开</div>
        <div class="top-box">
          <!-- 左边监测数据 -->
          <div class="lr-box left-box">
            <div class="left-container">
              <div class="item item-l" v-for="(groupNum, index) in monitorDataGroupNum" :key="index">
                <div class="monitor-box">
                  <ventBox1>
                    <template #title>
                      <div>{{ groupNum }}号空压机组</div>
                    </template>
                    <template #container>
                      <div class="state-item" v-for="(data, index) in showMonitorData" :key="index">
                        <div class="item-col">
                          <span class="state-title">{{ Object.values(data)[0] }} :</span>
                          <span class="state-val">{{ (monitorData[Object.keys(data)[0].replace('PRE', 'PRE'+ groupNum)])
                            >= 0 ? formatNum(Number(monitorData[Object.keys(data)[0].replace('PRE', 'PRE' + groupNum)])) : '-' }}</span>
                        </div>
                        <div class="item-col">
                          <span class="state-title">{{ Object.values(data)[1] }} :</span>
                          <span class="state-val">{{ (monitorData[Object.keys(data)[0].replace('PRE', 'PRE' + groupNum)])
                            >= 0 ? formatNum(Number(monitorData[Object.keys(data)[0].replace('PRE', 'PRE' + groupNum)])) : '-' }}</span>
                        </div>
                      </div>
                    </template>
                  </ventBox1>                
                </div>
              </div>
            </div>
          </div>
          <!-- 右边控制状态 -->
          <div class="lr-box right-box" style="display: none;">
            <ventBox1>
              <template #title>
                <div>远程控制</div>
              </template>
              <template #container>
                <div class="control-group">
                  <div class="control-item" v-for="groupNum in monitorDataGroupNum" :key="groupNum">
                    <div class="control-item-title">{{ kyjs[groupNum - 1] }}</div>
                    <div class="control-item-state">
                      <a-switch v-model="airCompressorState[groupNum - 1][`compressRunSigF1`]" size="small"  checked-children="开启"
                        un-checked-children="关闭" :disabled="airCompressorState[groupNum - 1][`controlModel`]"
                        @change="handlerDevice(airCompressorState[groupNum - 1])">
                      </a-switch>
                    </div>
                  </div>
                  <div class="control-item" v-for="groupNum in monitorDataGroupNum" :key="groupNum">
                    <div class="control-item-title">{{ cqgs[groupNum - 1] }}</div>
                    <div class="control-item-state">
                      <a-switch v-model="airCompressorState[groupNum - 1][`compressRunSigF1`]" size="small"  checked-children="开启"
                        un-checked-children="关闭" :disabled="airCompressorState[groupNum - 1][`controlModel`]"
                        @change="handlerDevice(airCompressorState[groupNum - 1])">
                      </a-switch>
                    </div>
                  </div>
                  
                  <a-divider style="height: 1px; background-color: #d7d7d755" />
                  <div class="control-btn-group vent-margin-b-20">
                    <div class="control-left-box">
                      <div class="btn-box">
                        <span @click="handlerDevice({ remote: true })">远程</span>
                        <span @click="handlerDevice({ remote: false })">就地</span>
                      </div>
                      <div class="icon-box" :class="{ 'remote-icon-box': true }">
                        <div class="icon"></div>
                      </div>
                    </div>
                    <div class="control-right-box">
                      <div class="control-item-title">是否开启联动</div>
                      <div class="item-data-box" >
                        <div :class="{ 'state-icon': true, 'open': monitorData[0] && monitorData[0].linkState, 'close': monitorData[0] && !monitorData[0].linkState }">
                        </div>
                        <div >{{ monitorData[0] && !monitorData[0].linkState ? '不联动' : '联动' }}</div>
                      </div>
                    </div>
                  </div>
                </div>
              </template>
            </ventBox1>
            
            <!-- <div class="control-item">
              <div class="control-item-l">
                <span class="round"></span>
                <span>控制模式</span>
              </div>
              <div>
                <a-switch v-model="airCompressorState[0][`controlModel`]" checked-children="就地" un-checked-children="远程"
                  @change="handlerControlModel(airCompressorState[0])">
                </a-switch>
              </div>
            </div> -->
          </div>
        </div>
      </div>
    </div>
</template>
<script lang="ts" setup name="nitrogenHome">
import { onMounted, onUnmounted, ref, watch } from 'vue'
import fourBorderBg from '../../../comment/components/fourBorderBg.vue'
import { mountedThree, destroy, setModelType, clearCssText } from '../nitrogen.threejs'
import { list } from '../nitrogen.api'
import ventBox1 from '/@/components/vent/ventBox1.vue'
import { monitorDataGroupNum1, monitorDataGroupNum2, monitorDataGroupNum3, airCompressorState, showMonitorData, monitorData } from '../nitrogen.data'
import { formatNum } from '/@/utils/ventutil'


const loading = ref(true)
const monitorDataGroupNum = ref(4)
const monitorDataGroupFlag = ref(1)
const kyjs = ['1号空压机', '2号空压机', '3号空压机', '4号空压机'];
const cqgs = ['1号储气罐', '2号储气罐', '3号储气罐', '4号储气罐'];

// https获取监测数据
let timer: null | NodeJS.Timeout = null;
async function getMonitor(flag?) {
  if (Object.prototype.toString.call(timer) === '[object Null]') {
    timer = await setTimeout(async () => {
      await getDataSource();
      if (timer) {
        timer = null;
      }
      await getMonitor(false);
    }, flag ? 0 : 1000);
  }
};

async function getDataSource() {
  const res = await list({ devicetype: 'forcFan', pagetype: 'normal' });
  let dataSource = res.msgTxt[0].datalist[0];
  if(dataSource){
    monitorData.value = Object.assign(dataSource, dataSource.readData);
  }
  // dataSource.forEach((data, index) => {
  //   const item = data.readData;
  //   Object.assign(item, data);
  //   item.compressRunSigF1 = item.compressRunSigF1 ? true : false
  //   airCompressorState.value[index].id = item.id
  //   airCompressorState.value[index].compressRunSigF1 = item.compressRunSigF1
  //   airCompressorState.value[index].controlModel = item.controlModel === 'LOC' ? true : false
  //   monitorData.value[index] = item
  // });
  // monitorDataGroupNum.value = monitorData.value.length
  loading.value = false
};

function handlerDevice(data) {
  // if (data.length < 1) return
  // handleAirCompressor({ id: data.id, compressRunF1: data.compressRunSigF1 }).then(res => {
  //   if (res.success) {
  //     message.success('操作成功')
  //   } else {
  //     message.warning(data.msg)
  //   }
  // })
};
function resetDevice(data) {

}

function handlerControlModel(data) {

}

watch(monitorDataGroupFlag, (newVal) => {

  if(newVal == 1){
    setModelType('compressor1')
  }
  if (newVal == 2) {
    setModelType('compressor2')
  }
})

onMounted(async () => {
  mountedThree(monitorDataGroupNum3).then(async() => {
    await getMonitor(true)
    setModelType('compressor1')
  })
})

onUnmounted(() => {
  destroy();
  if (timer) {
    clearTimeout(timer);
    timer = undefined;
  }
});

</script>

<style lang="less" scoped>
@ventSpace: zxm;

.nitrogen-home {
  width: 100%;
  height: 100%;
  display: flex;
  justify-content: center;
  position: relative;
  .total-data{
    position: absolute;
    color: #e4cd00;
    z-index: 9;
    top: 50px;
    right: 30px;
    // display: flex;
    font-size: 18px;
    .item{
      width: 200px;
      margin-left: 30px;
      .val{
        color: #00d8ff;
      }
    }
  }

}

.compressorCss3D-box {
  .modal-monitor {
    position: absolute;
    left: 0px;
    top: 0px;
  }

  &:deep(.win) {
    margin: 0 !important;
    background: #00000044;
  }

  &:deep(.main) {
    .title {
      height: 34px;
      text-align: center;
      font-weight: 600;
      color: #7AF5FF;
      // background-image: url('../../../assets/img/yfj/light.png');
      background-repeat: no-repeat;
      background-position-x: center;
      background-position-y: 100%;
      background-size: 80%;
      font-size: 16px;
    }

    .monitor-item {
      display: flex;
      flex-direction: row;
      width: auto;
      margin-bottom: 3px;
      .monitor-val {
        color: #ffb700;
        display: flex;
        width: auto;

        .val {
          width: 80px;
          font-size: 14px;
        }

        .unit {
          color: #ffffffbb;
          font-size: 14px;

        }
      }
    }

    .monitor-title {
      width: 100px;
      color: #7AF5FF;
      font-weight: 400;
      font-size: 14px;
    }

    .signal-item {
      display: flex;
      justify-content: space-between;

      // margin-bottom: 5px;
      .signal-round {
        display: inline-block;
        width: 8px;
        height: 8px;
        border-radius: 50%;
        margin: 0 10px;
        position: relative;

        &::after {
          display: block;
          content: '';
          position: absolute;
          width: 12px;
          height: 12px;
          top: -2px;
          left: -2px;
          border-radius: 50%;
        }
      }

      .signal-round-gry {
        background-color: #858585;

        &::after {
          background-color: #85858544;
          box-shadow: 0 0 1px 1px #85858599;
        }
      }

      .signal-round-run {
        background-color: #67FC00;

        &::after {
          background-color: #67FC0044;
          box-shadow: 0 0 1px 1px #c6ff77;
        }
      }

      .signal-round-warning {
        background-color: #E9170B;

        &::after {
          background-color: #E9170B44;
          box-shadow: 0 0 1px 1px #E9170B;
        }
      }
    }
  }
}

.nitrogen-home {
  width: 100%;
  height: calc(100% - 100px);
  position: fixed;
  z-index: 99;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  pointer-events: none;
  top: 60px;
  .nitrogen-container {
    width: 100%;
    height: calc(100%);
    display: flex;
    justify-content: space-between;
    margin-bottom: 100px;
    position: relative;
    .device-state{
      width: 100%;
      position: absolute;
      top: 20px;
      color: #e90000;
      display: flex;
      justify-content: center;
      font-size: 20px;
    }
    .top-box {
      width: 100%;
      padding: 10px;
      overflow: hidden;
      display: flex;
      justify-content: space-between;

      .lr-box {
        display: flex;
        flex-direction: column;
        position: relative;
        z-index: 9999;
        pointer-events: auto;
      }

      .item {
        width: 285px;
        height: auto;
        position: relative;
        border-radius: 5px;
        margin-top: 10px;
        margin-bottom: 0px;
        pointer-events: auto;
        color: #fff;
        overflow: hidden;

        .control-item {
          height: auto;
          min-height: 35px;
          display: flex;
          flex-direction: row;
          justify-content: space-between;
          align-items: center;
          padding: 5px;
          margin: 0 10px 0 3px;
          pointer-events: auto;
          background: linear-gradient(to right, #0063CD22, #0063CD04);

          margin-bottom: 5px;
          border-width: 1px;
          border-style: dashed;

          border-image: linear-gradient(to right, #008ccd66, #0063CD04)1 1;
          border-radius: 5px;

          &:last-child {
            margin-bottom: 0
          }

          .control-item-l {
            display: flex;
            align-items: center;
            font-size: 14px;

            .round {
              display: inline-block;
              width: 3px;
              height: 3px;
              padding: 1px;
              border-radius: 50%;
              background-color: #3DF6FF;
              margin-right: 5px;
              box-shadow: 0 0 1px 1px #64f7ff;
            }
          }

          .control-item-r {
            text-align: right;
          }

          .button-box {
            position: relative;
            padding: 5px;
            border: 1px transparent solid;
            background-clip: border-box;
            border-radius: 5px;
            margin-left: 8px;
          }

          .a-button {
            pointer-events: auto;
          }

          &::v-deep .a-button--mini {
            padding: 6px 10px;
          }

          &::v-deep .a-button--mini.is-round {
            padding: 6px 10px;
          }
        }

        .base-title {
          width: calc(100% - 60px);
          text-align: center;
          color: #00d8ff;
        }

        .state-item {
          display: flex;
          flex-direction: row;
          padding: 5px;

          .item-col {
            width: 50%;
            display: flex;
            justify-content: center;
            align-items: center;
            padding-right: 4px;

            .state-title {
              color: #ffffffcc;
              flex: 9;
              font-size: 14px;

              .unit {
                // color: #ffffffbb;
              }
            }

            .state-val {
              flex: 1;
              color: #e4a300;
              margin-right: 5px;
              text-align: right;
              font-size: 14px;
            }
          }
        }

        .signal-box {
          margin: 5px 0;
          display: flex;
          align-items: center;

          .signal-title {
            color: #7AF5FF;
            margin: 0 5px;
          }

          &:last-child {
            margin-right: 0px;
          }
        }

        .list-item {
          padding: 0 10px;
          display: flex;
          justify-content: space-between;
          align-items: center;

          .item-data-key {
            color: #ffffff99;
          }
        }

        .item-data-box {
          color: #fff;

          .state-icon {
            display: inline-block;
            width: 12px;
            height: 12px;
            border-radius: 12px;
          }

          .open {
            border: 5px solid #133a56;
            background: #4ecb73;
          }

          .close {
            border: 5px solid #192961;
            background: #6d7898;
          }
        }
      }

      .item-l {
        width: 335px;

        .monitor-box {
          // width: 335px;
          background-color: #ffffff05;
          // margin-left: 2px;
          // border-radius: 5px;
          // backdrop-filter: blur(10px);
        }
      }

      .right-box {
         width: 330px;
        .control-group{
          display: flex;
          // justify-content: space-around;
          flex-wrap: wrap;
          .control-item {
            
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            padding: 0 4px;
            .control-item-title{
              color: #A6DCE9;
              position: relative;
              top: 5px;
            }
            .control-item-state{
              width: 94px;
              height: 47px;
              background: url('/@/assets/images/vent/control-switch-bg.png');
              display: flex;
              justify-content: center;
              align-items: center;
              color: #fff;
            }
          
            .button-box {
              position: relative;
              padding: 5px;
              border: 1px transparent solid;
              background-clip: border-box;
              border-radius: 5px;
              margin-left: 8px;
            }

            .a-button {
              pointer-events: auto;
            }

            &::v-deep .a-button--mini {
              padding: 6px 10px;
            }

            &::v-deep .a-button--mini.is-round {
              padding: 6px 10px;
            }
          }

        }
        .control-btn-group{
          width: 100%;
          display: flex;
          flex-direction: row;
          justify-content: space-between;
          align-items: center;
          .control-left-box{
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            padding: 0 20px;
            .btn-box{
              width: 100px;
              color: #fff;
              display: flex;
              justify-content: space-between;
              span{
                display: inline-block;
                padding: 2px 8px;
                background: #007099;
                border-radius: 4px;
                border: 1px solid rgb(125, 230, 249);
                cursor: pointer;
                &:hover{
                  background: #005574;
                }
              }
            }
            .icon-box{
              width: 60px;
              height: 60px;
              border-radius: 30px;
              border: 2px solid #00bcdd;
              box-shadow: 0 0 20px #ffffff88;
              display: flex;
              justify-content: center;
              align-items: center;
              margin-top: 20px;
                
              .icon{
                width: 18px;
                height: 18px;
                border-radius: 9px;
                border: 3px solid #d7f9ff;
                position: relative;
                background: #00bcdd;
                &::before{
                  position: absolute;
                  content: '';
                  width: 2px;
                  height: 12px;
                  background-color: #00bcdd;
                  left: 6px;
                  top: -16px;
                }
                &::after{
                  position: absolute;
                  content: '';
                  width: 2px;
                  height: 12px;
                  left: 6px;
                  top: 17px;
                  background-color: #00d9ff;
                }
              }
            }
            .remote-icon-box{
              transform: rotate(30deg);
              animation: iconRotate 1s linear;
            }
            .remote-icon-box1{
              transform: rotate(-30deg);
              animation: iconRotate1 1s linear;
            }

            @keyframes iconRotate{
              from{
                transform: rotate(-30deg);
              }
              to {
                transform: rotate(30deg);
              }
            }
            @keyframes iconRotate1{
              from {
                transform: rotate(30deg);
              }
              to {
                transform: rotate(-30deg);
              }
            }
            
          }
          .control-right-box{
            width: 100px;
            color: #fff;
            height: 80px;
            justify-content: space-between;
            align-items: center;
            .btn{
              margin-bottom: 30px;
            }
          }
        }
      }

      .left-box {
        height: calc(100% );
        overflow-x: hidden;
        overflow-y: auto;
        pointer-events: auto;
        direction: rtl;
        .left-container{
          direction: ltr;
        }
        .control-item {
          height: 36px;
        }
      }
    }
  }
}
.tab-button-box{
  display: inline-block;
  position: relative;
  padding: 5px;
  // border: 1px transparent solid;
  border-radius: 5px;
  margin-left: 8px;
  margin-right: 8px;
  width: auto;
  // height: 40px;
  // border: 1px solid #65dbea;
  height: 35px !important;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  padding: 0 15px 5px 15px;
  cursor: pointer;
  &:hover {
    background: linear-gradient(#2cd1ff55, #1eb0ff55);
  }
  &::before {
    width: calc(100% - 6px);
    height: 27px;
    content: '';
    position: absolute;
    top: 3px;
    right: 0;
    left: 3px;
    bottom: 0;
    z-index: -1;
    border-radius: inherit; /*important*/
    background: linear-gradient(#1fa6cb, #127cb5);
  }
  &::after {
    width: calc(100% + 32px);
    height: 10px;
    content: '';
    position: absolute;
    top: 28px;
    right: 0;
    left: -16px;
    bottom: 0;
    z-index: -1;
    border-radius: inherit; /*important*/
    background: url('/@/assets/images/vent/short-light.png') no-repeat;
    background-position: center;
    background-size: 100%;
    z-index: 999;
  }
}

.tab-button-box-active {
  border: 1px solid #66989e !important;
  &:hover {
    background: none !important;
  }
  &::before {
    background: linear-gradient(#1fa6cbcc, #127cb5cc) !important;
  }
}
</style>
