<template>
  <div style="width:100%;height: 100%;">
    <a-table :loading="loading" :data-source="leftList" :pagination="false" bordered size="middle" class="ant-table-striped">
        <a-table-column title="教室" data-index="jsmc"/>
        <a-table-column title="教师近景" align="center" data-index="child_教师全景">
          <template #default="{ record }">
            <span :class="record?.child['教师全景']?.isOnLine?'green':'red'">
              <i class="fas fa-circle" />
            </span>
          </template>
        </a-table-column>
        <a-table-column title="教师全景" align="center" data-index="child_">
          <template #default="{ record }">
            <span :class="record?.child['录播主机']?.isOnLine?'green':'red'">
              <i class="fas fa-circle"/>
            </span>
          </template>
        </a-table-column>
        <a-table-column title="学生全景" align="center" data-index="child_学生全景">
          <template #default="{ record }">
            <span :class="record?.child['学生全景']?.isOnLine?'green':'red'">
              <i class="fas fa-circle"/>
            </span>
          </template>
        </a-table-column>
        <a-table-column title="PPT" align="center" data-index="child_PPT">
          <template #default="{ record }">
            <span :class="record?.child['PPT']?.isOnLine?'green':'red'">
              <i class="fas fa-circle"/>
            </span>
          </template>
        </a-table-column>
        <a-table-column title="直播推流" align="center" data-index="child_直播推流">
          <template #default="{ record }">
            <span :class="record?.child['录播主机']?.isOnLine?'green':'red'">
              <i class="fas fa-circle"/>
            </span>
          </template>
        </a-table-column>
        <a-table-column title="当前是否有课" align="center" data-index="nowIsClass">
          <template #default="{ record }">
            <span :class="record?.nowIsClass?'green':'red'">
              <i class="fas fa-circle"/>
            </span>
          </template>
        </a-table-column>
        <a-table-column title="下一节是否有课" align="center" data-index="nextIsClass">
          <template #default="{ record }">
            <span :class="record?.nextIsClass?'green':'red'">
              <i class="fas fa-circle"/>
            </span>
          </template>
        </a-table-column>
        <a-table-column title="课堂上线" align="center" data-index="sfyx">
          <template #default="{ text }">
            <span :class="text == 0?'green':'red'">
              <i class="fas fa-circle"/>
          </span>
          </template>
        </a-table-column>
        <a-table-column title="操作" data-index="action">
          <template #default="{ record }">
            <a @click="ylLive(record)">预览</a> |
            <a v-if="!record?.child['录播主机']?.isOnLine" @click="changeLive(record,true)">开启推流 |</a>
            <a v-else @click="changeLive(record,false)">关闭推流 |</a>
            <a v-if="record.sfyx == 1" @click="changeKt(record,true)">课堂上线</a>
            <a v-else-if="record.sfyx == 0" @click="changeKt(record,false)">课堂下线</a>
            <!-- {{ record.id }} -->
          </template>
        </a-table-column>
    </a-table>
  </div>
  <a-modal :visible="isShowAllLive" width="80%" style="top: 20px" title="直播" :ok-button-props="{ style: { display: 'none' } }" cancelText="关闭" @cancel="() => (isShowAllLive = false,showAllLiveRef.close())">
    <showAllLive ref="showAllLiveRef" :currentItem="currentItem"/>
  </a-modal>
</template>
<script lang="ts" setup name="zhihuijiaoshiIndexPage">
import { defHttp } from '/@/utils/http/axios';
import { ref, onMounted, Ref, watch } from 'vue';
import { nextTick } from 'vue';
import videojs from "video.js";
import { useMessage } from '/@/hooks/web/useMessage';
import showAllLive from './showAllLive.vue';
import { execAvyApi, getAvyCtrlLiveOpenOrCloseUrl } from "/@/views/site/utils/index";


// const _document:any = window.document;

const showAllLiveRef = ref();

const leftList:Ref<any> = ref([]);
const currentItem:Ref<any> = ref({});
// const topWidth:any = ref('0');
// const isfirst:any = ref(false);
const showAllLiveKey:Ref<string> = ref('showAllLiveKey');
const isShowAllLive:Ref<boolean> = ref(false);
const loading:Ref<boolean> = ref(false);
const { createMessage } = useMessage();

onMounted(() => {
  loadData();
});


enum Api {
  list = '/jiaoshi/kcZhihuijiaoshi/list',
  updateAllLive = '/jiaoshi/kcZhihuijiaoshi/updateAllLive',
  changeAvyLiveApi = '/httpinterface/runAvyApiByIds',
}
/**
 * 列表接口
 * @param params
 */
const list = (params) => defHttp.get({ url: Api.list, params });
const updateAllLive = (params) => defHttp.get({ url: Api.updateAllLive, params });
const changeAvyLiveApi = (params) => defHttp.get({ url: Api.changeAvyLiveApi, params });

function loadData(){
  loading.value = true;
  let getListAction:any = [];
  let liveIsExist = (x) => {
    return new Promise((resolve,reject) => {
      videojs.xhr.get(x.pullUrl,(err, resp, body) => {
        if(err){
          reject(false);
          x.isOnLine = false
        }else{
          resolve(true);
          x.isOnLine = true
        }
      })
      //此法不行，会跨域
      // defHttp.get({ url: x.pullUrl }, { isExternal: true, withToken: true }).then(res => {
      //   resolve(true);
      //   x.isOnLine = true;
      // }).catch(eres => {
      //   reject(false);
      //   x.isOnLine = false;
      // })
    })
  }


  list({ pageSize: -1, changshang: '奥威亚' }).then(res => {
    let list = (res?.records) ?? [];
    //聚合
    let map = {};
    list.forEach(x => {
      let item = map[x.jsmc];
      x.isOnLine = false;
      if(item){
        item.child[x.xm] = x;
      }else{
        let child = {};
        child[x.xm] = x;
        map[x.jsmc] = {
          ...x,
          child
        };
        item = map[x.jsmc];
      }
    });
    leftList.value = Object.values(map);
    loading.value = false;
    nextTick(() => {
      leftList.value.forEach(item => {
        let child = item.child;
        Object.values(child).forEach(item => {
          let x:any = item;
          // if(x.pullUrl == 'https://kczx.nenu.edu.cn:9553/live_hls/yfjxl101s_lbzj.m3u8')
          getListAction.push(liveIsExist(x));
        });
      });
      Promise.all(getListAction).then(resList => {
        console.log(`🚀 ~ file: index.vue:104 ~ Promise.all ~ ress:`, resList);
        // loading.value = false;
      }).catch((e) => {
        console.error(e);
        // loading.value = false;
      });
    });


    //计算左侧菜单高度
    // let mainDiv:any = _document?.querySelector('.ant-layout .jeecg-default-layout-main > div');
    // topWidth.value =mainDiv?.style?.height?? '0';
  });
}

function ylLive(record){

  console.log(`🚀 ---------------------------------------------------🚀`);
  console.log(`🚀 ~ file: index.vue:192 ~ ylLive ~ ----record:`, record);
  console.log(`🚀 ---------------------------------------------------🚀`);

  isShowAllLive.value = true
  nextTick(() => {
    currentItem.value = record
  })
}

function changeLive(record, isEnable){
  loading.value = true;
  let ids:any = [];
  let changeLiveEnd:any = [];
  Object.values(record.child).forEach(x => {
    let item:any = x;
    //收集ID
    ids.push(item.id);
    // changeLiveEnd.push(new Promise((resolve,reject) => {
    //   videojs.xhr.get(getAvyCtrlLiveOpenOrCloseUrl(item.ip,item.user,item.mima,isEnable),(err, resp, body) => {
    //     if(!err){
    //       resolve(true);
    //     }else{
    //       reject(false);
    //     }
    //   })
    // }));
  });

  // console.log('changeLiveEnd ->',changeLiveEnd);

  // Promise.all(changeLiveEnd).then(resList => {
  //   console.log(`🚀 ----------------------------------------------------------🚀`);
  //   console.log(`🚀 ~ file: index.vue:181 ~ Promise.all ~ resList:`, resList);
  //   console.log(`🚀 ----------------------------------------------------------🚀`);
  //   createMessage.info("操作成功！");
  //   loadData();
  // }).catch(e => {
  //   console.error(e);
  //   createMessage.error("操作失败！");
  //   loading.value = false;
  // });
  changeAvyLiveApi({ ids:ids.join(','),  type: isEnable?1:0 }).then(res => {
    loadData();
  }).catch(e => {
    console.error(e);
    loading.value = false;
  })


  // if(!err){
  //       createMessage.info("操作成功！");
  //       loadData();
  //     }else{
  //       createMessage.error("操作失败！");
  //     }


}

function changeKt(record, isEnable){
  loading.value = true;
  let ids:any = [];
  Object.values(record.child).forEach(x => {
    let item:any = x;
    ids.push(item.id);
  });
  if(!ids) return;
  updateAllLive({ ids: ids.join(','), sfyx: isEnable?0:1}).then(res => {
    console.log(`🚀 ----------------------------------------------------🚀`);
    console.log(`🚀 ~ file: index.vue:176 ~ updateAllLive ~ res:`, res);
    console.log(`🚀 ----------------------------------------------------🚀`);
    loadData();
    // createMessage.
  }).catch(e => {
    console.error(e);
    loading.value = false;
  })

}

</script>
<style lang="less" scoped>
.videoMax{
  width: 25%;
}
.videoCardMain {
  :deep(.ant-card-body) {
    padding: 0;
  }
}
/* 隐藏video 进度条 */
video::-webkit-media-controls-timeline {
    display: none;
}
.green {
  color: green;
}
.red {
  color: red;
}
</style>