<script setup lang="ts">
import axios from "axios";
import { onMounted, ref, reactive } from "vue";
// import dplayer from "@/components/VideoPlayer/MyPlayer.vue";
// import OurPlayer from "@/components/VideoPlayer/OurPlayer.vue";
import { PureTableBar } from "@/components/RePureTableBar";
import { PureTable } from "@pureadmin/table";
import { type PaginationProps } from "@pureadmin/table";
import { ElMessageBox, ElMessage } from "element-plus";
import { getConfig } from "@/config";
import { getToken, formatToken } from "@/utils/auth";
import { getHomeList } from "@/api/home";

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];
  }
  const 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
  };
  getHomeList(params).then(response => {
    const dataList = response;
    totalNumber.value = dataList.count;
    pagination.total = dataList.count;
    console.log(totalNumber.value, "totalNumber");
    if (!isDisplay) {
      tableData.value = dataList.results.filter(data => {
        return data.is_display === true;
      });
    } else {
      tableData.value = dataList.results;
    }
    console.log(pagination, "pagination");
    setTimeout(() => {
      loading.value = false;
    }, 500);
  });
  // 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;
  //     }
  //     setTimeout(() => {
  //       loading.value = false;
  //     }, 500);
  //   })
  //   .catch(error => {
  //     ElMessage({
  //       message: "网络暂不通畅",
  //       type: "warning"
  //     });
  //     setTimeout(() => {
  //       loading.value = false;
  //     }, 500);
  //     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;

const columns: TableColumnList = [
  {
    label: "记录仪日期时间",
    prop: "record_time",
    minWidth: 100,
    sortable: true
  },
  {
    label: "警号",
    prop: "police_id",
    minWidth: 100
  },
  {
    label: "违法行为",
    prop: "event_type",
    minWidth: 100
  },
  {
    label: "是否违规",
    prop: "is_violation",
    minWidth: 100
  },
  {
    label: "违规行为",
    prop: "ai_analysis",
    minWidth: 100
  },
  {
    label: "时间点",
    prop: "relative_time",
    minWidth: 100
  },
  {
    label: "缩率图",
    slot: "image"
  },
  {
    label: "车牌号",
    prop: "car_number",
    minWidth: 100
  },
  {
    label: "视频",
    slot: "video"
  }
];
const loading = ref(true);
const pagination = reactive<PaginationProps>({
  total: totalNumber.value,
  pageSize: pageSize.value,
  currentPage: currentPage.value,
  background: true
});
console.log(totalNumber.value, "totalNumber");
console.log(pagination, "pagination111111");

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

<template>
  <div class="main">
    <el-dialog
      width="60%"
      v-model="dialogVisible"
      :before-close="handleClose"
      destroy-on-close
    >
      <!-- <our-player /> -->
    </el-dialog>
    <el-form
      :inline="true"
      :model="formInline"
      class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px]"
    >
      <el-form-item label="日期:" style="font-weight: bold">
        <el-date-picker
          :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-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-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>
    <PureTableBar title="首页列表" :columns="columns" @refresh="onSearch">
      <template v-slot="{ size, dynamicColumns }">
        <pure-table
          border
          adaptive
          align-whole="center"
          table-layout="auto"
          :loading="loading"
          :size="size"
          :data="tableData"
          :columns="dynamicColumns"
          :pagination="pagination"
          :paginationSmall="size === 'small' ? true : false"
          :header-cell-style="{
            background: 'var(--el-table-row-hover-bg-color)',
            color: 'var(--el-text-color-primary)'
          }"
          @page-size-change="handleSizeChange"
          @page-current-change="handleCurrentChange"
        >
          <template #image="{ row, index }">
            <el-image
              preview-teleported
              loading="lazy"
              :src="row.small_image"
              :preview-src-list="[row.small_image]"
              :initial-index="index"
              fit="cover"
              class="w-[100px] h-[100px]"
            />
          </template>
          <template #video="{ row }">
            <video width="180" height="180" controls>
              <source :src="row.video_dir" type="video/mp4" />
            </video>
          </template>
        </pure-table>
      </template>
    </PureTableBar>
    <!-- <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="违法行为" />

      <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 {
  padding: 0;
  list-style-type: none;
}

a {
  color: #42b983;
}

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

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

.tablePage {
  display: flex;
  justify-content: flex-end;
  margin: 0 auto;
}
</style>