import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
import { useAuth } from './auth';
import Vue3TouchEvents from 'vue3-touch-events';
import 'bootstrap/dist/css/bootstrap.min.css';
import deviceSecurityService from './services/deviceSecurity';

// Создаем приложение
const app = createApp(App);

// Подключаем библиотеку для обработки свайпов и жестов
app.use(Vue3TouchEvents);

// Используем роутер
app.use(router);

// Получаем экземпляр нашего auth "стора"
const { fetchUser, handleDeviceBlocked } = useAuth();

// Асинхронная самовызывающаяся функция для инициализации
(async () => {
  try {
    // Инициализируем систему безопасности устройств
    console.log('Инициализация системы безопасности устройств...');
    await deviceSecurityService.initialize();
    
    // Подписываемся на события блокировки устройства
    deviceSecurityService.onDeviceBlocked(handleDeviceBlocked);
    
    console.log('Система безопасности устройств инициализирована');
    
    // Проверяем, не заблокировано ли устройство
    if (deviceSecurityService.isDeviceBlocked()) {
      console.warn('Устройство заблокировано, перенаправляем на страницу входа');
      window.location.href = '/login?blocked=true&type=device';
      return;
    }
    
    await fetchUser(); // Пытаемся загрузить пользователя по токену из localStorage
  } catch (error) {
    console.error("Ошибка при начальной загрузке пользователя в main.js:", error);
    // Здесь можно ничего не делать, logout уже должен был быть вызван внутри fetchUser при ошибке
  } finally {
    // После того как fetchUser отработал (успешно или нет), монтируем приложение
    app.mount('#app');
    console.log('Приложение Vue смонтировано.');
  }
})();