<template>
  <div
    class="flex gap-4 justify-between items-center header-bg"
    style="z-index: 10000; position: relative; font-size: 16px; height: 40px"
  >
    <div>
      <a
        style="color: white; text-decoration: underline"
        href="/mark/subject-select"
        >{{ store.setting.subject?.name }}</a
      >
    </div>
    <div v-if="store.setting.statusValue === 'TRIAL'">试评</div>
    <div class="flex gap-1">
      <div>
        编号<span class="highlight-text">{{
          store.currentTask?.studentCode
        }}</span>
      </div>
      <div
        v-if="store.currentTask && store.currentTask.objectiveScore !== null"
      >
        客观分<span class="highlight-text">{{
          store.currentTask.objectiveScore
        }}</span>
      </div>
    </div>
    <ul class="flex gap-2 mb-0">
      <li>
        已评<span class="highlight-text">{{ store.status.markedCount }}</span>
      </li>
      <li v-if="store.setting.topCount">
        分配<span class="highlight-text">{{ store.setting.topCount }}</span>
      </li>
      <li>
        未评<span class="highlight-text">{{
          store.status.totalCount - store.status.markedCount
        }}</span>
      </li>
      <li
        :title="`问题卷${store.status.problemCount}\n待仲裁${store.status.arbitrateCount}`"
        style="line-height: 20px"
      >
        <QuestionCircleOutlined :style="{ 'font-size': '20px' }" />
      </li>
      <li>
        进度<span class="highlight-text">{{ progress }}%</span>
      </li>
    </ul>
    <ul class="flex gap-2 mb-0">
      <li @click="upScale" title="放大" style="line-height: 20px">
        <PlusCircleOutlined
          :style="{
            'font-size': '20px',
            color: greaterThanOneScale ? 'red' : 'white',
          }"
        />
      </li>
      <li @click="downScale" title="缩小" style="line-height: 20px">
        <MinusCircleOutlined
          :style="{
            'font-size': '20px',
            color: lessThanOneScale ? 'red' : 'white',
          }"
        />
      </li>
      <li @click="normalScale" title="适应" style="line-height: 20px">
        <FullscreenOutlined :style="{ 'font-size': '20px' }" />
      </li>
    </ul>
    <div @click="toggleSettingMode" style="line-height: 20px">
      {{ modeName }} {{ store.setting.forceMode ? "" : "(切换)" }}
    </div>
    <div @click="toggleHistory" style="line-height: 20px" title="回看">
      <HistoryOutlined :style="{ 'font-size': '20px' }" />
    </div>
    <div
      class="flex place-items-center"
      :title="
        '评卷时间段：' +
        $filters.datetimeFilter(store.setting.startTime) +
        ' ~ ' +
        $filters.datetimeFilter(store.setting.startTime)
      "
    >
      <ClockCircleOutlined
        :style="{ 'font-size': '20px' }"
        style="line-height: 20px"
      />
    </div>
    <div>{{ group?.title }}(切换)</div>
    <div class="flex place-items-center">
      <UserOutlined
        :style="{ 'font-size': '18px' }"
        style="line-height: 18px"
      />{{ store.setting.marker?.name }}
    </div>
    <div class="flex place-items-center">
      <PoweroffOutlined
        :style="{ 'font-size': '18px' }"
        style="line-height: 18px"
      />退出
    </div>
  </div>
</template>

<script lang="ts">
import { getHistoryTask } from "@/api/markPage";
import { computed, defineComponent } from "vue";
import { store } from "./store";
import {
  PlusCircleOutlined,
  MinusCircleOutlined,
  FullscreenOutlined,
  HistoryOutlined,
  UserOutlined,
  PoweroffOutlined,
  ClockCircleOutlined,
  QuestionCircleOutlined,
} from "@ant-design/icons-vue";
import { ModeEnum } from "@/types";

export default defineComponent({
  name: "MarkHeader",
  components: {
    PlusCircleOutlined,
    MinusCircleOutlined,
    FullscreenOutlined,
    HistoryOutlined,
    UserOutlined,
    PoweroffOutlined,
    ClockCircleOutlined,
    QuestionCircleOutlined,
  },
  setup() {
    const modeName = computed(() =>
      store.setting.mode === ModeEnum.TRACK ? "轨迹模式" : "普通模式"
    );
    function toggleSettingMode() {
      if (store.setting.mode === ModeEnum.TRACK) {
        store.setting.mode = ModeEnum.COMMON;
      } else {
        store.setting.mode = ModeEnum.TRACK;
      }
    }
    const progress = computed(() => {
      const { totalCount, markedCount } = store.status;
      if (totalCount <= 0) return 0;
      let p = markedCount / totalCount;
      if (p < 0.01 && markedCount >= 1) p = 0.01;
      p = Math.floor(p * 100);
      return p;
    });
    const group = computed(() => {
      return store.groups.find((g) => g.number === store.setting.groupNumber);
    });

    const upScale = () => {
      const s = store.setting.uiSetting["answer.paper.scale"];
      if (s < 3)
        store.setting.uiSetting["answer.paper.scale"] = +(s + 0.2).toFixed(1);
    };
    const downScale = () => {
      const s = store.setting.uiSetting["answer.paper.scale"];
      if (s > 0.2)
        store.setting.uiSetting["answer.paper.scale"] = +(s - 0.2).toFixed(1);
    };
    const normalScale = () => {
      store.setting.uiSetting["answer.paper.scale"] = 1;
    };
    const toggleHistory = () => {
      store.historyOpen = !store.historyOpen;
    };
    const greaterThanOneScale = computed(() => {
      return store.setting.uiSetting["answer.paper.scale"] > 1;
    });
    const lessThanOneScale = computed(() => {
      return store.setting.uiSetting["answer.paper.scale"] < 1;
    });

    async function updateHistoryTask({
      pageNumber = 1,
      pageSize = 10,
      order = "markerTime",
      sort = "DESC",
      secretNumber = null,
    }: {
      pageNumber: number; // 从1开始
      pageSize: number;
      order: "markerTime" | "markerScore";
      sort: "ASC" | "DESC";
      secretNumber: string | null;
    }) {
      const res = await getHistoryTask({
        pageNumber,
        pageSize,
        order,
        sort,
        secretNumber,
      });
      if (res.data) {
        store.historyTasks.push(res.data);
      }
    }

    return {
      store,
      modeName,
      toggleSettingMode,
      progress,
      group,
      upScale,
      downScale,
      normalScale,
      greaterThanOneScale,
      lessThanOneScale,
      updateHistoryTask,
      toggleHistory,
    };
  },
});
</script>

<style scoped>
.header-bg {
  background-color: #5d6d7d;
  color: white;
}
.highlight-text {
  color: #ffe400;
}
</style>
