<template>
    <el-card class="remoteTitle">
        <div class="card-content">
            <div class="demo-image">
                <div class="block">
                    <span class="demonstration">通讯异常</span>
                    <el-icon><Connection color="rgb(255,0,0)"/></el-icon>
                </div>
                <div class="block">
                    <span class="demonstration">读写失败</span>
                    <el-icon><Failed color="rgb(255,0,0)"/></el-icon>
                </div>
                <div class="block">
                    <span class="demonstration">读写成功</span>
                    <el-icon><CircleCheckFilled color="rgb(0,255,0)"/></el-icon>
                </div>
            </div>
            <div class="demo-button">
                <el-button type="primary" size="small" :loading="isLoading" @click="ReadAllStatus">读取全部</el-button>
                <el-button type="primary" size="small" :loading="isLoading" @click="WriteAllStatus">写入全部</el-button>
            </div>
        </div>
    </el-card>
    <el-loading :visible="isLoading" text="加载中..."></el-loading>
    <div class="remoteContent">
      <el-table
        ref="tableRef"
        v-model:checked="selectedRows" 
        @selection-change="handleSelectionChange" 
        @row-click="handleRowClick"
        width="500px"
        show-header="true" 
        :height="tableHeight"
        :cell-style="setCellStyle" 
        border 
        highlight-current-row 
        :header-cell-style="setHeaderCellStyle"  
        :data="visibleData" 
        v-loading="isLoading" 
        :row-key="transferId"
        element-loading-text="数据加载中......"
        :element-loading-spinner="svg"
        element-loading-svg-view-box="-10, -10, 50, 50"
        element-loading-background="rgba(122, 122, 122, 0.8)"
        >
        <el-table-column type="selection" width="55px" />
        <el-table-column prop="rowIndex" label="序号" width="60px" />
        <el-table-column prop="transferId" label="机组编号" v-if="false" />
        <el-table-column prop="transferName" label="换热机组" />
        <el-table-column label="状态" width="60px">
            <template #default="{ row }">
                <el-icon v-if="row.transferStatus === 0"></el-icon>
                <el-icon v-if="row.transferStatus === 1"><CircleCheckFilled color="rgb(0,255,0)"/></el-icon>
                <el-icon v-if="row.transferStatus === 2"><Failed color="rgb(255,0,0)"/></el-icon>
                <el-icon v-if="row.transferStatus === 3"><Connection color="rgb(255,0,0)"/></el-icon>
            </template>
        </el-table-column>
      </el-table>
      <div :style="{ height: tableHeight + 'px', paddingTop: 10 + 'px' }" style="width: 100%; margin: 0 5px; display:flex; flex-direction: column;  align-items: center; vertical-align: top;">
          <h3 >{{ forms.transferName }}</h3>
          <el-form :model="forms" label-width="230px" :style="{ height: (tableHeight-80) + 'px'}" style="overflow-y: auto; width: 100%;">
              <el-form-item label="节假日模式:" v-if="forms.holidayAction != null">
                <el-checkbox v-model="forms.holidayAction" size="large" />
              </el-form-item>
              <el-form-item label="节假日起始时间:">
                <el-col :span="5">
                    起始月:
                    <el-select v-model="forms.holidayMonStart" placeholder="起始月" size="small" @change="updateStartDay(forms)">
                            <el-option
                            v-for="item in month"
                            :key="item"
                            :label="item"
                            :value="item"
                            />
                    </el-select>
                </el-col>
                <el-col :span="2" class="text-center">
                    <span class="text-gray-500"></span>
                </el-col>
                <el-col :span="5">
                    起始日:
                    <el-select v-model="forms.holidayDayStart" placeholder="起始日" size="small">
                        <el-option
                        v-for="item in startDay"
                        :key="item"
                        :label="item"
                        :value="item"
                        />
                    </el-select>
                </el-col>
                <el-col :span="2" class="text-center">
                    <span class="text-gray-500"></span>
                </el-col>
                <el-col :span="5">
                    起始时:
                    <el-select v-model="forms.holidayHourStart" placeholder="起始时" size="small">
                        <el-option
                        v-for="item in hour"
                        :key="item"
                        :label="item"
                        :value="item"
                        />
                    </el-select>
                </el-col>
              </el-form-item>
              <el-form-item label="节假日结束时间:">
                <el-col :span="5">
                    终止月:
                    <el-select v-model="forms.holidayMonEnd" placeholder="终止月" size="small" @change="updateEndDay(forms)">
                        <el-option
                        v-for="item in month"
                        :key="item"
                        :label="item"
                        :value="item"
                        />
                    </el-select>
                </el-col>
                <el-col :span="2" class="text-center">
                    <span class="text-gray-500"></span>
                </el-col>
                <el-col :span="5">
                    终止日:
                    <el-select v-model="forms.holidayDayEnd" placeholder="终止日" size="small">
                        <el-option
                        v-for="item in endDay"
                        :key="item"
                        :label="item"
                        :value="item"
                        />
                    </el-select>
                </el-col>
                <el-col :span="2" class="text-center">
                    <span class="text-gray-500"></span>
                </el-col>
                <el-col :span="5">
                    终止时:
                    <el-select v-model="forms.holidayHourEnd" placeholder="终止时" size="small">
                        <el-option
                        v-for="item in hour"
                        :key="item"
                        :label="item"
                        :value="item"
                        />
                    </el-select>
                </el-col>
              </el-form-item>
              <el-form-item label="节假日起始星期:">
                <el-col :span="5">
                    起始星期:
                    <el-select v-model="forms.holidayWeekStart" placeholder="起始星期" size="small">
                        <el-option
                        v-for="item in week"
                        :key="item"
                        :label="item"
                        :value="item"
                        />
                    </el-select>
                </el-col>
                <el-col :span="2" class="text-center">
                    <span class="text-gray-500"></span>
                </el-col>
                <el-col :span="5">
                    <span v-if="forms.weekHourStart">起始小时:</span>
                    <el-select v-model="forms.weekHourStart" v-if="forms.weekHourStart" placeholder="起始小时" size="small">
                        <el-option
                        v-for="item in hour"
                        :key="item"
                        :label="item"
                        :value="item"
                        />
                    </el-select>
                </el-col>
              </el-form-item>
              <el-form-item label="节假日终止星期:">
                <el-col :span="5">
                    终止星期:
                    <el-select v-model="forms.holidayWeekEnd" placeholder="终止星期" size="small">
                        <el-option
                        v-for="item in week"
                        :key="item"
                        :label="item"
                        :value="item"
                        />
                    </el-select>
                </el-col>
                <el-col :span="2" class="text-center">
                    <span class="text-gray-500"></span>
                </el-col>
                <el-col :span="5">
                    <span v-if="forms.weekHourEnd">终止小时:</span>
                    <el-select v-model="forms.weekHourEnd" placeholder="终止小时" v-if="forms.weekHourEnd" size="small">
                        <el-option
                        v-for="item in hour"
                        :key="item"
                        :label="item"
                        :value="item"
                        />
                    </el-select>
                </el-col>
              </el-form-item>
              <el-form-item label="节假日恒定温度:" v-if="forms.holidayConstantTemp != null">
                <el-input v-model="forms.holidayConstantTemp" style="width: 200px;" v-float-number/>
              </el-form-item>
          </el-form>
          <div style="height:30px; margin: 5px;">
              <el-button type="primary" :isLoading="isLoading" size="small" @click="ReadStatus(forms)">读  取</el-button>
              <el-button type="primary" :isLoading="isLoading"  :disabled="forms.isDisabled" size="small" @click="WriteStatus(forms)">写  入</el-button>
          </div>
      </div>
    </div>
  
    <el-card style="height: 50px; padding: 0;">
        <el-progress
            :indeterminate="myIndeterminate"
            :stroke-width="16"
            :percentage="progress"
            />
    </el-card>
  </template>
  <script setup>
    import { ref, reactive, computed, onMounted, onUnmounted, watch,toRefs,nextTick  } from 'vue';
    import http from '../../api/http';
    import store from "../../store/index";
    import { ElMessage } from "element-plus";
    import { vFloatNumber } from "../../utils/directives.js";
  
    const enterpriseId = store.getters.getEnterpriseId();
    const props = defineProps(['activeRadio']);
    const tableRef = ref([]);
    const selectedRows = ref([]);
    const isLoading= ref(true);
    const visibleData = ref([]);
    const tableHeight = ref(500);
    const progress =ref(0);
    const myIndeterminate=ref(false);
    const week = [0,1,2,3,4,5,6,7];
    const month = [0,1,2,3,4,5,6,7,8,9,10,11,12];
    const startDay = reactive([]);
    const endDay = reactive([]);
    const hour = reactive([]);
    const forms = reactive({
          transferId:"", 
          transferName:"", 
          isDisabled: true,
          transferStatus: 0,
          holidayAction: false,
          holidayMonStart: 0,
          holidayDayStart: 0,
          holidayHourStart: 0,
          holidayMonEnd: 0,
          holidayDayEnd: 0,
          holidayHourEnd: 0,
          holidayWeekStart: 0,
          holidayWeekEnd: 0,
          holidayConstantTemp: 0,
          weekHourStart: 0,
          weekHourEnd: 0
      });
    
    onMounted(() => {
        startDay.length=0;
        endDay.length =0;
        for(let i = 0; i<= 31;i++){
            startDay.push(i.toString().padStart(2, '0'));
            endDay.push(i.toString().padStart(2, '0'));
        }
        for(let i = 0; i<= 23;i++){
            hour.push(i.toString().padStart(2, '0'));
        }
        setContentHeight();
        window.addEventListener('resize', setContentHeight);
    })
  
    onUnmounted(() => {
        window.removeEventListener('resize', setContentHeight);
    })
  
    watch(() =>props.activeRadio, (oldValue, newValue) => {
        initData();
    },{deep:true});
  
    function setContentHeight() {
        tableHeight.value = window.innerHeight - 300;
    }
  
    async function initData(){
        isLoading.value = true;
        var type = 0;
        if(enterpriseId === "9BCA54BC-8F27-4849-8D7D-50C5099E1949".toLowerCase()){
            type = 1;
        }
        var result = await http.post('/api/remote/GetHoliday',{"SupplyType":type, "DeviceId": props.activeRadio});
       // console.log(result);
        if(result.success){
            visibleData.value = result.data;
            handleRowClick(visibleData.value[0]);
        }else{
            ElMessage.error(result.message);
        }
        isLoading.value = false;
    }
    initData();
  
    async function ReadStatus(row){
      row.transferStatus = 0;
      handleRowClick(row);
      myIndeterminate.value = !myIndeterminate.value;
      progress.value=50;
      isLoading.value = true;
      await ReadStation(row);
      isLoading.value = false;
      myIndeterminate.value = !myIndeterminate.value;
      progress.value=100;
    }
  
    async function ReadAllStatus(){
        if(selectedRows.value.length === 0){
            ElMessage.warning("请勾选需要远程控制的换热站!");
            return;
        }
        myIndeterminate.value = !myIndeterminate.value;
        progress.value=1;
        isLoading.value = true;
        if(selectedRows){
            var total = selectedRows.value.length;
            var count =0;
            for(const item of selectedRows.value){
              item.transferStatus = 0;
              }
            for(const item of selectedRows.value){
              await ReadStation(item);
              count=count+1;
              progress.value = (count/total*100).toFixed(2); 
            }
        }
        isLoading.value = false;
        myIndeterminate.value = !myIndeterminate.value;
        progress.value=100;
    }
    async function WriteStatus(row){
      row.transferStatus = 0;
      myIndeterminate.value = !myIndeterminate.value;
      progress.value=50;
      isLoading.value = true;
      await WriteStation(row);
      isLoading.value = false;
      myIndeterminate.value = !myIndeterminate.value;
      progress.value=100;
    }
    async function WriteAllStatus(){
      if(selectedRows.value.length === 0){
            ElMessage.warning("请勾选需要远程控制的换热站!");
            return;
        }
        if(forms.isDisabled === true){
            ElMessage.error(forms.transferName +" 先读取后写入");
            return;
        }
        myIndeterminate.value = !myIndeterminate.value;
        progress.value=1;
        isLoading.value = true;
        if(selectedRows){
            var total = selectedRows.value.length;
            var count =0;
            for(const item of selectedRows.value){
              item.transferStatus = 0;
              }
            for(const item of selectedRows.value){
              if(item.isDisabled === false){        
                await WriteStation(item);
              }else{
                ElMessage.warning(item.transferName + " 写入失败,应先读取再写入");
                item.transferStatus = 2;
              }
              count=count+1;
              progress.value = (count/total*100).toFixed(2);
            }
            
        }
        isLoading.value = false;
        myIndeterminate.value = !myIndeterminate.value;
        progress.value=100;
    }
    async function ReadStation(row){
        var result = await http.post('/api/remote/ReadHoliday', row.transferId);
        if(result.success){
            var jobj = result.data[0];
            //console.log("Value:"+jobj);
            if(jobj && visibleData){
                for(const element of visibleData.value){
                    if(element.transferId === row.transferId){
                        element.holidayAction = jobj.holidayAction;
                        element.holidayMonStart = jobj.holidayMonStart;
                        element.holidayDayStart = jobj.holidayDayStart;
                        element.holidayHourStart = jobj.holidayHourStart;
                        element.holidayMonEnd = jobj.holidayMonEnd;
                        element.holidayDayEnd = jobj.holidayDayEnd;
                        element.holidayHourEnd = jobj.holidayHourEnd;
                        element.holidayWeekStart = jobj.holidayWeekStart;
                        element.holidayWeekEnd = jobj.holidayWeekEnd;
                        element.holidayConstantTemp = jobj.holidayConstantTemp;
                        element.weekHourStart = jobj.weekHourStart;
                        element.weekHourEnd = jobj.weekHourEnd;
                        element.isDisabled = false;
                        element.transferStatus = jobj.transferStatus;
                        ElMessage.success(row.transferName +" 读取成功");
                        handleRowClick(element);
                        //console.log("gainMode:"+jobj.gainMode);
                        break;
                    }
                };
            }
        }else{
            ElMessage.error(row.transferName +": "+ result.message);
            row.transferStatus = 3;
        }
    }
    async function WriteStation(element){
      try{
            //console.log("write row:"+element.transferName);
            var writeValue = "";
            //if(forms.holidayAction != null && forms.holidayAction != ""){
                element.holidayAction=forms.holidayAction;
                writeValue ="HolidayAction:"+ (forms.holidayAction===true ? "1;":"0;");
            // }
            // if(element.holidayMonStart != null && forms.holidayMonStart != ""){
                element.holidayMonStart=forms.holidayMonStart;
                writeValue +="HolidayMonStart:"+forms.holidayMonStart + ";";
            // }
            // if(element.holidayDayStart != null && forms.holidayDayStart != ""){
                element.holidayDayStart=forms.holidayDayStart;
                writeValue +="HolidayDayStart:"+forms.holidayDayStart + ";";
            //}
            //if(element.holidayHourStart != null && forms.holidayHourStart != ""){
                element.holidayHourStart=forms.holidayHourStart;
                writeValue +="HolidayHourStart:"+forms.holidayHourStart + ";";
            //}
            //if(element.holidayMonEnd != null && forms.holidayMonEnd != ""){
                element.holidayMonEnd=forms.holidayMonEnd;
                writeValue +="HolidayMonEnd:"+forms.holidayMonEnd + ";";
            //}
            //if(element.holidayDayEnd != null && forms.holidayDayEnd != ""){
                element.holidayDayEnd=forms.holidayDayEnd;
                writeValue +="HolidayDayEnd:"+forms.holidayDayEnd + ";";
            //}
            //if(element.holidayHourEnd != null && forms.holidayHourEnd != ""){
                element.holidayHourEnd=forms.holidayHourEnd;
                writeValue +="HolidayHourEnd:"+forms.holidayHourEnd + ";";
            //}
            //if(element.holidayWeekStart != null && forms.holidayWeekStart != ""){
                element.holidayWeekStart=forms.holidayWeekStart;
                writeValue +="HolidayWeekStart:"+forms.holidayWeekStart + ";";
            //}
            //if(element.holidayWeekEnd != null && forms.holidayWeekEnd != ""){
                element.holidayWeekEnd=forms.holidayWeekEnd;
                writeValue +="HolidayWeekEnd:"+forms.holidayWeekEnd + ";";
            //}
            //if(element.holidayConstantTemp != null && forms.holidayConstantTemp != ""){
                element.holidayConstantTemp=forms.holidayConstantTemp;
                writeValue +="HolidayConstantTemp:"+forms.holidayConstantTemp + ";";
            //}
            if(element.weekHourStart != null && forms.weekHourStart != ""){
                element.weekHourStart=forms.weekHourStart;
                writeValue +="WeekHourStart:"+forms.weekHourStart + ";";
            }
            if(element.weekHourEnd != null && forms.weekHourEnd != ""){
                element.weekHourEnd=forms.weekHourEnd;
                writeValue +="WeekHourEnd:"+forms.weekHourEnd + ";";
            }
            if(writeValue === ''){
                ElMessage.error(element.transferName +" 未获取到写入数据");
                return;
            }
          //console.log(writeValue);
            var result = await http.post('/api/remote/WriteTransfer', {"TransferId":element.transferId, "WriteValues": writeValue, "PanelType": 2});
            if(result.success){
              ElMessage.success(element.transferName +" "+ result.data);
              element.transferStatus = 1;
              handleRowClick(forms);
            }else{
            ElMessage.error(element.transferName +" "+ result.message);
            if(result.message === "连接异常"){
                element.transferStatus = 3;
            }else{
                element.transferStatus = 2;
            }
        }
      }catch(error){
          ElMessage.error(element.transferName +" "+ error.message);
          element.transferStatus = 3;
      }
    }
    function setCellStyle({ row, column, rowIndex, columnIndex }) {
        let css_color = {};
        css_color['padding-left'] = '0px';
        css_color['padding-right'] = '0px';
        css_color['borderColor'] = '#97d5fd';
        css_color['padding'] = '0px';
        css_color['textAlign'] = 'center';
  
        if(row.transferId === forms.transferId){
          css_color['backgroundColor'] = '#f0faff';
        }else{
          css_color['backgroundColor'] = '#fff';
        }
        return css_color;
    }
  
    function setHeaderCellStyle({ row, column, rowIndex, columnIndex }) {
        let css_color;
        var backcolor = 'd9f1ff';
        css_color = { 'background-color': '#' + backcolor, 'padding-left': '0px', 'padding-right': '0px', 'borderColor': '#97d5fd', 'color': '#000', 'text-align': 'center', 'vertical-align': 'top' };
  
        var backcolor = 'd9f1ff';
        css_color = { 'background-color': '#' + backcolor, 'padding-left': '0px', 'padding-right': '0px', 'borderColor': '#97d5fd', 'color': '#000', 'text-align': 'center', 'vertical-align': 'top' };
  
        return css_color;
    }
  
    const handleSelectionChange = (selection) => {
        selectedRows.value = selection;
    };
  
    const handleRowClick=(row)=>{
        // console.log(row);
        visibleData.value.forEach((item) =>{
            nextTick(() => {
                if(item.transferId === forms.transferId){
                    tableRef.value.toggleRowSelection(item,true);
                }
            });
        })
      forms.transferId = row.transferId;
      forms.transferName = row.transferName;
      forms.isDisabled = row.isDisabled;
      forms.transferStatus = row.transferStatus;
      forms.holidayAction  = row.holidayAction ;
      forms.holidayMonStart = row.holidayMonStart;
      forms.holidayDayStart = row.holidayDayStart;
      forms.holidayHourStart = row.holidayHourStart;
      forms.holidayMonEnd = row.holidayMonEnd;
      forms.holidayDayEnd = row.holidayDayEnd;
      forms.holidayHourEnd = row.holidayHourEnd;
      forms.holidayWeekStart = row.holidayWeekStart;
      forms.holidayWeekEnd = row.holidayWeekEnd;
      forms.holidayConstantTemp = row.holidayConstantTemp;
      forms.waterBoxClose = row.waterBoxClose;
      forms.weekHourStart = row.weekHourStart;
      forms.weekHourEnd = row.weekHourEnd;
    }
  
    const svg = `
        <path class="path" d="
          M 30 15
          L 28 17
          M 25.61 25.61
          A 15 15, 0, 0, 1, 15 30
          A 15 15, 0, 1, 1, 27.99 7.5
          L 15 15
        " style="stroke-width: 4px; fill: rgba(0, 0, 0, 0)"/>`
    function updateStartDay(row){
        var days = 31;
        const year = new Date().getFullYear();
        days = new Date(year, row.holidayMonStart, 0).getDate();
        startDay.length =0;
        for(var i = 0; i<= days;i++){
            startDay.push(i.toString().padStart(2, '0'));
        }
        row.holidayDayStart = 0;
    }
    function updateEndDay(row){
        var days = 31;
        const year = new Date().getFullYear();
        days = new Date(year, row.holidayMonEnd, 0).getDate();
        endDay.length =0;
        for(var i = 0; i<= days;i++){
            endDay.push(i.toString().padStart(2, '0'));
        }
        row.holidayDayEnd = 0;
    }
  </script>
  
  <style scoped>
  .remoteTitle{
    width: 100%;
  }
  
  .card-content {
      display: flex;
      justify-content: space-between;
      height: 20px;
  }
  
  .remoteContent{
      width:100%;
      height: 100%;
      display: flex;
      justify-content:center;
      align-items: center;
  }
  
  .demo-button{
    display: right;
    width: 20%;
  }
  
  .demo-image {
    width: 80%;
    display: left;
    flex: 9;
    margin-top: -10px;
  }
  
  .demo-image .block {
      padding: 1px 0;
      text-align: center;
      border-right: solid 1px var(--el-border-color);
      display: inline-block;
      width: 80px;
      box-sizing: border-box;
      vertical-align: top;
  }
  .demo-image .block:last-child {
      border-right: none;
  }
  .demo-image .demonstration {
      display: block;
      color: var(--el-text-color-secondary);
      font-size: 12px;
      margin-bottom: 0px;
  }
  .el-select{
    width:100px;
  }
  </style>