from PySide6.QtWidgets import QStackedWidget
from app.ui.views.login_view import LoginView
from app.ui.views.chat_list_view import ChatListView
from app.core.models.chat_models import PrivateChatListItem
from app.core.models.mock_data import get_mock_chats  # ← заглушка
from typing import Optional
from threading import Thread
import time  # эмуляция задержки от сервера
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.chat_list_view: Optional[ChatListView] = 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

        # 🔹 1. Загружаем чаты локально
        chat_items: list[PrivateChatListItem] = self.load_local_chats()

        # 🔹 2. Отображаем список
        self.chat_list_view = ChatListView(username=username, chat_items=chat_items)
        self.addWidget(self.chat_list_view)
        self.setCurrentWidget(self.chat_list_view)
        self.chat_list_view.show()

        # 🔹 3. Обновляем в фоне с сервера
        Thread(target=self.update_chats_from_server, args=(username,), daemon=True).start()

    def load_local_chats(self) -> list[PrivateChatListItem]:
        # Позже можешь заменить это чтением из JSON или SQLite
        return get_mock_chats()

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

        # Здесь должен быть запрос к серверу и обновление UI:
        # new_chats = api.get_chats(username)
        # self.chat_list_view.update_chat_items(new_chats)
