from PySide6.QtWidgets import QStackedWidget
from app.ui.views.login_view import LoginView
from app.ui.views.yobble_home_view import YobbleHomeView # <--- Изменено
from typing import Optional
from threading import Thread
import time  # эмуляция задержки от сервера
import asyncio
from app.core.database import get_last_login, get_session, set_last_login

class MainController(QStackedWidget):
    def __init__(self):
        super().__init__()
        self.login_view: Optional[LoginView] = None
        self.yobble_home_view: Optional[YobbleHomeView] = None # <--- Изменено

        self.init_app()

    def init_app(self):
        """Проверяет наличие сессии для автологина."""
        last_login = get_last_login()
        if last_login:
            session = get_session(last_login)
            if session:
                self.handle_login_success(last_login)
                return

        self.show_login()

    def show_login(self):
        self.login_view = LoginView(on_login=self.handle_login_success)
        self.addWidget(self.login_view)
        self.setCurrentWidget(self.login_view)
        self.login_view.show()

    def handle_login_success(self, username: str):
        """Обрабатывает успешный вход в систему."""
        set_last_login(username)

        if self.login_view:
            self.login_view.close()
            self.removeWidget(self.login_view)
            self.login_view = None

        # Отображаем новый главный экран
        self.yobble_home_view = YobbleHomeView(username=username)
        self.addWidget(self.yobble_home_view)
        self.setCurrentWidget(self.yobble_home_view)
        self.yobble_home_view.show()

        # 🔹 Оставляем фоновое обновление на будущее
        Thread(target=self.update_data_from_server, args=(username,), daemon=True).start()

    def update_data_from_server(self, username: str):
        """
        В фоновом режиме обновляет данные с сервера.
        Эмулирует задержку и предзагружает права доступа.
        """
        # Эмуляция запроса
        time.sleep(2)
        print(f"[Sync] Обновляем данные для пользователя: {username}")

        if self.yobble_home_view:
            print("[Sync] Запускаем предзагрузку прав доступа...")
            try:
                # Запускаем асинхронную функцию в текущем потоке
                asyncio.run(self.yobble_home_view.preload_permissions())
                print("[Sync] Предзагрузка прав доступа завершена.")
            except Exception as e:
                print(f"[Sync] Ошибка во время предзагрузки прав: {e}")
