import { createApp } from 'vue';
import { WebviewWindow } from '@tauri-apps/api/webviewWindow';
import App from './App.vue';
import pinia from '@/pinia/store';
import { author, copyright } from '../package.json';
import { useRouterGuard } from './router/router-guard';
import dayjs from 'dayjs';
import { useThrottleFn } from '@vueuse/core';
import router from './router/router';
import ErrorHandler from '@/utils/error-handler';
import 'dayjs/locale/zh-cn';
import '@/styles/main/root.scss';
import '@/styles/main/dom.scss';
import '@/styles/main/element-plus.scss';
import '@/styles/main/global.scss';
import '@/styles/main/font.css';
import '@/styles/main/transition.scss';
import { isTauri } from '@tauri-apps/api/core';

const IS_TAURI = isTauri();

// 设置dayjs的默认语言为中文
dayjs.locale('zh-cn');

// 在控制台输出作者和版权信息，使用CSS样式美化输出效果
console.log(
  ` %c  ${author.email}  %c ${copyright} `,
  'color: #fadfa3; background: #030307; padding:5px 0;',
  'color: #030307;background: #fadfa3; padding:5px 0;'
);

// 创建Vue应用实例
const app = createApp(App);
// 注册路由和状态管理
app.use(router).use(pinia);

// 初始化全局错误处理器
IS_TAURI && ErrorHandler.getInstance().init();

// 挂载应用到DOM元素#app上
app.mount('#app');
// 注册路由前置守卫
useRouterGuard();

/**
 * 全局注册节流函数
 * 用于防止函数被频繁调用，例如按钮点击事件
 * 节流间隔为500毫秒
 */
app.config.globalProperties.$throttle = useThrottleFn((fun: (...args: any[]) => void, ...args: any[]) => {
  fun(...args);
}, 500);

// 全局注册dayjs，方便在模板中直接使用
app.config.globalProperties.$dayjs = dayjs;

setTimeout(() => {
  !import.meta.env.MODE && WebviewWindow.getCurrent().setFocus();
}, 10);
