<template>
  <div id="app">
    <div v-if="loading" id="loader-wrapper">
      <div id="loader"></div>
      <div class="loader-section section-left"></div>
      <div class="loader-section section-right"></div>
      <div class="load_title">{{ loadingText }}</div>
    </div>
    <router-view />
    <theme-picker />
  </div>
</template>

<script>
import ThemePicker from "@/components/ThemePicker";
import { refreshToken } from "@/api/login";
import { getToken } from "@/utils/auth";

export default {
  name: "App",
  components: { ThemePicker },
  data() {
    return {
      timer: null,
      loading: true,
      loadingText: '正在加载系统资源，请耐心等待'
    };
  },
  methods: {
    async startTokenRefresh() {
      if (this.timer) {
        clearInterval(this.timer);
      }
      let outTime = 5 * 60 * 60 * 1000;
      this.timer = setInterval(async () => {
        try {
          if (!getToken()) return;
          const response = await refreshToken();
          console.log(object);
        } catch (error) {
          console.error("token刷新失败:", error);
        }
      }, outTime);
    },
  },
  mounted() {
    this.startTokenRefresh();
  },
  beforeDestroy() {
    if (this.timer) {
      clearInterval(this.timer);
    }
  },
  metaInfo() {
    // 获取cookie中的language值，默认为zh_CN
    const getLanguage = () => {
      const value = `; ${document.cookie}`;
      const parts = value.split(`; language=`);
      if (parts.length === 2) return parts.pop().split(';').shift();
      return 'zh_CN';
    };

    const language = getLanguage();
    console.log('language',language)
    const isChinese = language === 'zh_CN';
    const loadingTexts = {
      'zh_CN': '正在加载系统资源，请耐心等待',
      'en_US': 'Loading system resources, please wait'
    };

    this.loadingText = loadingTexts[language] || loadingTexts['zh_CN'];
    // 模拟加载完成
    setTimeout(() => {
      this.loading = false;
    }, 800);
    // 根据语言选择标题
    const mainTitle = isChinese
        ? process.env.VUE_APP_TITLE_ZH
        : process.env.VUE_APP_TITLE_EN;

    const pageTitle = this.$store.state.settings.dynamicTitle
        ? this.$store.state.settings.title
        : null;

    return {
      title: pageTitle,
      titleTemplate: (title) => {
        return title ? `${title} - ${mainTitle}` : mainTitle;
      },
    };
  },
};
</script>
<style>
#app .theme-picker {
  display: none;
}
#loader-wrapper {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 999999;
}

#loader {
  display: block;
  position: relative;
  left: 50%;
  top: 50%;
  width: 150px;
  height: 150px;
  margin: -75px 0 0 -75px;
  border-radius: 50%;
  border: 3px solid transparent;
  border-top-color: #FFF;
  -webkit-animation: spin 2s linear infinite;
  -ms-animation: spin 2s linear infinite;
  -moz-animation: spin 2s linear infinite;
  -o-animation: spin 2s linear infinite;
  animation: spin 2s linear infinite;
  z-index: 1001;
}

#loader:before {
  content: "";
  position: absolute;
  top: 5px;
  left: 5px;
  right: 5px;
  bottom: 5px;
  border-radius: 50%;
  border: 3px solid transparent;
  border-top-color: #FFF;
  -webkit-animation: spin 3s linear infinite;
  -moz-animation: spin 3s linear infinite;
  -o-animation: spin 3s linear infinite;
  -ms-animation: spin 3s linear infinite;
  animation: spin 3s linear infinite;
}

#loader:after {
  content: "";
  position: absolute;
  top: 15px;
  left: 15px;
  right: 15px;
  bottom: 15px;
  border-radius: 50%;
  border: 3px solid transparent;
  border-top-color: #FFF;
  -moz-animation: spin 1.5s linear infinite;
  -o-animation: spin 1.5s linear infinite;
  -ms-animation: spin 1.5s linear infinite;
  -webkit-animation: spin 1.5s linear infinite;
  animation: spin 1.5s linear infinite;
}

@-webkit-keyframes spin {
  0% {
    -webkit-transform: rotate(0deg);
    -ms-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(360deg);
    -ms-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}

@keyframes spin {
  0% {
    -webkit-transform: rotate(0deg);
    -ms-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(360deg);
    -ms-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}

#loader-wrapper .loader-section {
  position: fixed;
  top: 0;
  width: 51%;
  height: 100%;
  background: #7171C6;
  z-index: 1000;
  -webkit-transform: translateX(0);
  -ms-transform: translateX(0);
  transform: translateX(0);
}

#loader-wrapper .loader-section.section-left {
  left: 0;
}

#loader-wrapper .loader-section.section-right {
  right: 0;
}

.loaded #loader-wrapper .loader-section.section-left {
  -webkit-transform: translateX(-100%);
  -ms-transform: translateX(-100%);
  transform: translateX(-100%);
  -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
  transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
}

.loaded #loader-wrapper .loader-section.section-right {
  -webkit-transform: translateX(100%);
  -ms-transform: translateX(100%);
  transform: translateX(100%);
  -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
  transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
}

.loaded #loader {
  opacity: 0;
  -webkit-transition: all 0.3s ease-out;
  transition: all 0.3s ease-out;
}

.loaded #loader-wrapper {
  visibility: hidden;
  -webkit-transform: translateY(-100%);
  -ms-transform: translateY(-100%);
  transform: translateY(-100%);
  -webkit-transition: all 0.3s 1s ease-out;
  transition: all 0.3s 1s ease-out;
}

#loader-wrapper .load_title {
  font-family: 'Open Sans';
  color: #FFF;
  font-size: 19px;
  width: 100%;
  text-align: center;
  z-index: 9999999999999;
  position: absolute;
  top: 60%;
  opacity: 1;
  line-height: 30px;
}
</style>
