<script setup lang="ts">
import axios from "axios";
import { onMounted, ref } from "vue";
import dplayer from "@/components/VideoPlayer/MyPlayer.vue";
import OurPlayer from "@/components/VideoPlayer/OurPlayer.vue";
import { ElMessageBox, ElMessage } from "element-plus";
import { getConfig } from "@/config";
import { getToken, formatToken } from "@/utils/auth";

defineOptions({
  name: "Welcome"
});

const AdminHostUrl = getConfig().AdminHostUrl;

const formInline = ref({
  date: [],
  policeId: "",
  event: "",
  violation: "",
  violationType: ""
});

const currentPage = ref(1);
const totalNumber = ref(0);
const pageSize = ref(10);
const isDisplay = true;

const dialogVisible = ref(false);

const tableData = ref([]);

const eventMap = ref({});

const violationMap = ref({
  "是": "1",
  "否": "0",
  "所有": "2"
})


function playVideo(data) {
  data = JSON.parse(JSON.stringify(data));
  // console.log(AdminHostUrl)
  dialogVisible.value = true;
  const highlights = [
    // 进度条时间点高亮
    {
      text: data.event_type,
      time: data.relative_time
    }
  ];
  sessionStorage.setItem("video_url", data.video_dir);
  sessionStorage.setItem("highlights", JSON.stringify(highlights));
}

function onSearch() {
  let start_time;
  let end_time;
  if (formInline.value.date) {
    start_time = formInline.value.date[0];
    end_time = formInline.value.date[1];
  }

  axios({
    url: AdminHostUrl,
    params: {
      start_time: start_time || undefined,
      end_time: end_time || undefined,
      police_id: formInline.value.policeId || undefined,
      event_type: formInline.value.event || undefined,
      violation: violationMap.value[formInline.value.violation] || undefined,
      violation_type: formInline.value.violationType || undefined,
      page: currentPage.value || undefined,
      page_size: pageSize.value || undefined
    },
    headers: {
      token: formatToken(getToken().accessToken)
    }
  })
    .then(response => {
      // console.log(response.data);
      totalNumber.value = response.data.count;
      if (!isDisplay) {
        tableData.value = response.data.results.filter(data => {
          return data.is_display === true;
        });
      } else {
        tableData.value = response.data.results;
      }
    })
    .catch(error => {
      ElMessage({
        message: "网络暂不通畅",
        type: "warning"
      })
      console.log(error);
    });
}

function handleSearch() {
  currentPage.value = 1;
  onSearch();
}

function handleRefresh() {
  onSearch();
}

function handleSizeChange(val) {
  pageSize.value = val;
  onSearch();
}

function handleCurrentChange(val) {
  currentPage.value = val;
  onSearch();
}

const handleClose = (done: () => void) => {
  ElMessageBox.confirm("确定关掉此视频")
    .then(() => {
      dialogVisible.value = false;
      done();
    })
    .catch(() => {
      // catch error
    });
};

function getEvents() {

  axios({
    url: AdminHostUrl + "events",
    headers: {
      token: formatToken(getToken().accessToken)
    }
  })
    .then(response => {
      eventMap.value = response.data.data;
      // console.log(eventMap.value);
    })
    .catch(error => {
      ElMessage({
        message: "网络暂不通畅",
        type: "warning"
      })
      console.log(error);
    });

}

function pickerOptions(time){
  return time.getTime() > Date.now()
}

const now_date = new Date();
now_date.setMonth(now_date.getMonth() - 1)
const lastMonth = now_date

onMounted(() => {
  onSearch();
});
</script>

<template>
  <div class="hello">
    <el-dialog
      width="60%"
      v-model="dialogVisible"
      :before-close="handleClose"
      destroy-on-close
    >
      <our-player></our-player>
    </el-dialog>
    <el-form :inline="true" :model="formInline" class="demo-form-inline">
      <el-form-item label="日期:" style="font-weight: bold">
        <el-date-picker
          v-model="formInline.date"
          type="daterange"
          unlink-panels
          range-separator="--"
          start-placeholder="开始日期"
          end-placeholder="结束日期"
          value-format="YYYY-MM-DD"
          :disabled-date="pickerOptions"
          :default-value="lastMonth"
        />
      </el-form-item>

      <el-form-item label="警号:">
        <el-input v-model="formInline.policeId" placeholder="警号" clearable style="width: 198px" />
      </el-form-item>

      <el-form-item label="违法行为:">
        <!--        <el-input v-model="formInline.event" placeholder="事件"/>-->
        <el-select v-model="formInline.event" placeholder="违法行为" clearable @click="getEvents">
          <el-option v-for="(event, type) in eventMap" :key="type" :label="event" :value="event"></el-option>
        </el-select>
      </el-form-item>

      <el-form-item label="是否违规:">
        <el-select v-model="formInline.violation" placeholder="是否违规" clearable>
          <el-option v-for="(event, type) in violationMap" :key="event" :label="type" :value="type"></el-option>
        </el-select>
      </el-form-item>

      <el-form-item label="违规行为:">
        <el-input v-model="formInline.violationType" placeholder="违规行为" clearable style="width: 198px" />
      </el-form-item>

      <el-form-item>
        <el-button type="primary" @click="handleSearch">查询</el-button>
      </el-form-item>

      <el-form-item>
        <el-button @click="handleRefresh"
        >刷新
        </el-button
        >
      </el-form-item>
    </el-form>

    <el-table
      :data="tableData"
      stripe
      :default-sort="{ prop: 'record_time', order: 'descending' }"
      style="width: 100%"
    >
      <el-table-column prop="record_time" sortable label="记录仪日期时间" />
      <el-table-column prop="police_id" label="警号" />
      <el-table-column prop="event_type" label="违法行为">
<!--        <template v-slot="scope">-->
<!--          <span>-->
<!--            {{ scope.row.event_type || "未定义事件" }}-->
<!--          </span>-->
<!--        </template>-->
      </el-table-column>

      <el-table-column prop="is_violation" label="是否违规">
        <template v-slot="scope">
          <span v-if="scope.row.is_violation">是</span>
          <span v-else>否</span>
        </template>
      </el-table-column>

      <el-table-column prop="ai_analysis" label="违规行为" />
      <el-table-column prop="relative_time" label="时间点">
        <template v-slot="scope">
          <span>第 {{ scope.row.relative_time }} 秒</span>
        </template>
      </el-table-column>

      <el-table-column prop="small_image" label="缩率图">
        <template v-slot="scope">
          <el-image
            :preview-src-list="[scope.row.small_image]"
            style="width: 65px; height: 65px"
            :src="scope.row.small_image"
            :preview-teleported="true"
          />
        </template>
      </el-table-column>

      <el-table-column prop="car_number" label="车牌号" />

      <el-table-column show-overflow-tooltip label="视频">
        <template v-slot="scope">
          <el-button @click="playVideo(scope.row)">
            <span v-if="scope.row.video_dir">播放视频</span>
            <span v-else>暂无视频</span>
          </el-button>

        </template>

      </el-table-column>
    </el-table>
    <el-pagination
      class="tablePage"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      v-model:current-page="currentPage"
      :page-sizes="[10, 20, 30, 40]"
      v-model:page-size="pageSize"
      layout="total, sizes, prev, pager, next"
      :total="totalNumber"
    />
  </div>
</template>

<style scoped>
h3 {
  margin: 40px 0 0;
}

ul {
  list-style-type: none;
  padding: 0;
}

li {
}

a {
  color: #42b983;
}

.hello {
  margin: 5px auto;
  text-align: right;
  overflow: hidden;
}

.demo-form-inline {
  align-items: center;
  display: flex;
  justify-content: flex-end;
  margin: 0 auto;
}

.tablePage {
  display: flex;
  justify-content: flex-end;
  margin: 0 auto;
}

</style>