<template>
  <v-navigation-drawer :permanent="true" :rail="rail" class="tsb-box">
    <v-list v-model:opened="open" class="side-list" density="compact" :nav="true">
      <!-- 负责收缩侧边栏 -->
      <v-list-item @click="collapse()">
        <template v-if="rail" #prepend>
          <v-list-item-action>
            <v-icon>mdi-chevron-right</v-icon>
          </v-list-item-action>
        </template>
        <template v-else #append>
          <v-list-item-action>
            <v-icon>mdi-chevron-left</v-icon>
          </v-list-item-action>
        </template>
      </v-list-item>
      <!-- 菜单项 -->
      <v-list-item value="home" title="首页" :link="true" href="/">
        <template #prepend>
          <img src="/source/UI/paimon.webp" alt="homeIcon" class="side-icon" />
        </template>
      </v-list-item>
      <v-list-item title="公告" value="announcements" :link="true" href="/announcements">
        <template #prepend>
          <img src="../../assets/icons/board.svg" alt="annoIcon" class="side-icon" />
        </template>
      </v-list-item>
      <v-list-item title="咨讯" value="news" :link="true" href="/news/2">
        <template #prepend>
          <img src="/platforms/mhy/mys.webp" alt="mihoyo" class="side-icon" />
        </template>
      </v-list-item>
      <v-list-item title="帖子" value="posts" :link="true" href="/posts">
        <template #prepend>
          <img src="/source/UI/posts.png" alt="posts" class="side-icon" />
        </template>
      </v-list-item>
      <v-list-item title="成就" value="achievements" :link="true" href="/achievements">
        <template #prepend>
          <img src="../../assets/icons/achievements.svg" alt="achievementsIcon" class="side-icon" />
        </template>
      </v-list-item>
      <v-divider />
      <v-list-item title="原神战绩" value="record" :link="true" href="/user/record">
        <template #prepend>
          <img src="/source/UI/userRecord.webp" alt="record" class="side-icon" />
        </template>
      </v-list-item>
      <v-list-item title="我的角色" value="character" :link="true" href="/user/characters">
        <template #prepend>
          <img src="/source/UI/userAvatar.webp" alt="characters" class="side-icon" />
        </template>
      </v-list-item>
      <v-list-item title="深渊记录" value="abyss" :link="true" href="/user/abyss">
        <template #prepend>
          <img src="/source/UI/userAbyss.webp" alt="abyss" class="side-icon" />
        </template>
      </v-list-item>
      <v-list-item title="祈愿记录" value="gacha" :link="true" href="/user/gacha">
        <template #prepend>
          <img src="/source/UI/userGacha.webp" alt="gacha" class="side-icon" />
        </template>
      </v-list-item>
      <v-divider />
      <v-list-item v-show="isDevEnv" title="测试" value="test" :link="true" href="/test">
        <template #prepend>
          <v-icon>mdi-test-tube</v-icon>
        </template>
      </v-list-item>
      <v-divider v-show="isDevEnv" />
      <v-list-group value="wiki" :fluid="true">
        <template #activator="{ props }">
          <v-list-item title="图鉴" v-bind="props">
            <template #prepend>
              <img src="/source/UI/wikiIcon.webp" alt="wikiIcon" class="side-icon" />
            </template>
          </v-list-item>
        </template>
        <v-list-item title="深渊数据库" value="wiki-abyss" :link="true" href="/wiki/abyss">
          <template #prepend>
            <img src="/source/UI/wikiAbyss.webp" alt="abyssIcon" class="side-icon" />
          </template>
        </v-list-item>
        <v-list-item title="角色图鉴" value="wiki-character" :link="true" href="/wiki/character">
          <template #prepend>
            <img src="/source/UI/wikiAvatar.webp" alt="characterIcon" class="side-icon" />
          </template>
        </v-list-item>
        <v-list-item title="武器图鉴" value="wiki-weapon" :link="true" href="/wiki/weapon">
          <template #prepend>
            <img src="/source/UI/wikiWeapon.webp" alt="weaponIcon" class="side-icon" />
          </template>
        </v-list-item>
        <v-list-item title="GCG" value="wiki-GCG" :link="true" href="/wiki/GCG">
          <template #prepend>
            <img src="/source/UI/wikiGCG.webp" alt="gcgIcon" class="side-icon" />
          </template>
        </v-list-item>
      </v-list-group>
      <div class="bottom-menu">
        <v-menu :open-on-click="true" location="end">
          <template #activator="{ props }">
            <v-list-item :title="userInfo.nickname" v-bind="props">
              <template #prepend>
                <img :src="userInfo.avatar" alt="userIcon" class="side-icon" />
              </template>
            </v-list-item>
          </template>
          <v-list class="side-list-user" density="compact" :nav="true">
            <v-list-item class="side-item-user" title="签到" @click="openClient('sign_in')">
              <template #prepend>
                <img src="/source/UI/userGacha.webp" class="side-icon-user" alt="sing_in" />
              </template>
            </v-list-item>
            <v-list-item class="side-item-user" title="战绩" @click="openClient('game_record')">
              <template #prepend>
                <img src="/source/UI/userRecord.webp" class="side-icon-user" alt="game_record" />
              </template>
            </v-list-item>
            <v-list-item class="side-item-user" title="便笺" @click="openClient('daily_note')">
              <template #prepend>
                <img src="/icon/material/210.webp" class="side-icon-user" alt="daily_note" />
              </template>
            </v-list-item>
            <v-list-item class="side-item-user" title="酒馆" @click="openClient('tavern')">
              <template #prepend>
                <img src="/platforms/mhy/mys.webp" alt="酒馆" class="side-icon-user" />
              </template>
            </v-list-item>
            <v-list-item
              class="side-item-user"
              title="登录"
              @click="login"
              v-show="userStore.cookie.value?.game_token === ''"
            >
              <template #prepend>
                <img src="/source/UI/defaultUser.webp" class="side-icon-user" alt="login" />
              </template>
            </v-list-item>
          </v-list>
        </v-menu>
        <v-list-item :title="themeTitle" @click="switchTheme()">
          <template #prepend>
            <v-icon>
              {{ themeGet === "default" ? "mdi-weather-night" : "mdi-weather-sunny" }}
            </v-icon>
          </template>
        </v-list-item>
        <v-list-item title="设置" value="config" :link="true" href="/config">
          <template #prepend>
            <img src="../../assets/icons/setting.svg" alt="setting" class="side-icon" />
          </template>
        </v-list-item>
      </div>
    </v-list>
  </v-navigation-drawer>
</template>

<script lang="ts" setup>
import { event, window as TauriWindow } from "@tauri-apps/api";
import { storeToRefs } from "pinia";
import { computed, onMounted, ref } from "vue";

import { useAppStore } from "../../store/modules/app";
import { useUserStore } from "../../store/modules/user";
import mhyClient from "../../utils/TGClient";
import showSnackbar from "../func/snackbar";

const appStore = useAppStore();
const userStore = storeToRefs(useUserStore());

const isDevEnv = ref<boolean>(import.meta.env.MODE === "development");

const userInfo = computed(() => {
  const info = userStore.briefInfo.value;
  if (info && info.nickname) return info;
  return {
    nickname: "未登录",
    avatar: "/source/UI/defaultUser.webp",
  };
});
const rail = ref(appStore.sidebar.collapse);
// theme
const themeGet = computed({
  get() {
    return appStore.theme;
  },
  set(value: string) {
    appStore.theme = value;
  },
});
const themeTitle = computed(() => {
  return themeGet.value === "default" ? "夜间模式" : "日间模式";
});

const open = computed({
  get() {
    return appStore.getSubmenu();
  },
  set(value: string[]) {
    appStore.sidebar.submenu.wiki = value.includes("wiki");
  },
});

function collapse(): void {
  rail.value = !rail.value;
  appStore.sidebar.collapse = rail.value;
}

onMounted(async () => {
  await listenOnTheme();
  if (TauriWindow.getCurrent().label === "TeyvatGuide") {
    await mhyClient.run();
  }
});

async function listenOnTheme(): Promise<void> {
  await event.listen("readTheme", (e) => {
    const theme = <string>e.payload;
    themeGet.value = theme === "default" ? "default" : "dark";
  });
}

async function switchTheme(): Promise<void> {
  await event.emit("readTheme", themeGet.value === "default" ? "dark" : "default");
}

async function openClient(func: string): Promise<void> {
  if (appStore.isLogin) {
    await mhyClient.open(func);
  } else {
    login();
  }
}

function login(): void {
  showSnackbar({
    text: "请前往设置页面扫码登录",
  });
}
</script>

<style lang="css" scoped>
.tsb-box {
  background: var(--app-side-bg);
  color: var(--app-side-content);
}

.side-list {
  height: 100%;
  font-family: var(--font-title);
}

.bottom-menu {
  position: absolute;
  bottom: 0;
  width: 100%;
}

.side-icon {
  width: 24px;
  height: 24px;
  border-radius: 5px;
  margin-right: 32px;
}

.side-list-user {
  background: var(--app-side-bg) !important;
  color: var(--app-side-content) !important;
  font-family: var(--font-title);
}

.side-item-user {
  border: 1px solid var(--common-shadow-2);
  background: var(--box-bg-1);
}

.side-icon-user {
  width: 20px;
  height: 20px;
  border-radius: 5px;
  margin-right: 10px;
}
</style>
