import sys
from tools.utils import get_internal_dir

from PySide6.QtCore import QResource
from PySide6.QtGui import QFontDatabase, QFont
from PySide6.QtWidgets import QApplication

# Imports pour la gestion de la configuration
from config.config_manager import ConfigManager
from config.constants import Resources

# Imports pour la vérification Discord
from discord.discord_tools import CheckDiscord

# Import pour la partie ui
from ui.custom_message_box import CustomMessageBox
from ui.main_window import MainWindow

# Ne pas supprimer ! Enregistre les ressources Qt
import resources  # noqa: F401 - required to register Qt resources


# ---------------------------------------------------------------------------
# Bundle path resolution
# ---------------------------------------------------------------------------
bundle_dir = get_internal_dir()
QResource.registerResource(f"{bundle_dir}/resources.py")


# ---------------------------------------------------------------------------
# Font helper
# ---------------------------------------------------------------------------
def load_custom_font() -> str:
    font_id = QFontDatabase.addApplicationFont(Resources.FONT.value)
    if font_id == -1:
        raise RuntimeError("Failed to load font from resources.")
    font_families = QFontDatabase.applicationFontFamilies(font_id)
    if not font_families:
        raise RuntimeError("No font families found in the loaded font.")
    return font_families[0]


# ---------------------------------------------------------------------------
# Entry point
# ---------------------------------------------------------------------------
if __name__ == "__main__":
    app = QApplication(sys.argv)

    # 1. Initialisation UNIQUE du gestionnaire de config
    config = ConfigManager()

    # 2. Setup environnemental (Styles & Fonts)
    try:
        with open(f"{bundle_dir}/styles/styles.qss", 'r') as f:
            app.setStyleSheet(f.read())

        app.setFont(QFont(load_custom_font(), 16))
    except Exception as e:
        print(f"Erreur lors du chargement des styles : {e}")


    # 3. Garde-fou Discord
    if not CheckDiscord.isdiscordrunning():
        msg = CustomMessageBox(
            title="La Tanière: Discord non détecté",
            message="Discord ne semble pas lancé.\n\n"
                    "Tu dois avoir démarré Discord et y être connecté pour utiliser l'application.\n\n"
                    "Lorsque cela sera fait, relance le launcher.",
            icon_type=CustomMessageBox.WARNING,
            buttons=CustomMessageBox.OK
        )
        msg.exec()
        sys.exit(0)  # On quitte proprement sans lancer MainWindow

    # On récupère l'ID stocké (sera "" si absent grâce au schéma)
    stored_user_id = config.get_discord_user()
    if stored_user_id != "" and not stored_user_id.isspace():
        if not CheckDiscord.isuserconnected():
            msg = CustomMessageBox(
                title="La Tanière: connexion Discord",
                message="Tu n'est pas connecté à Discord\n\n"
                        "Assure-toi que tu es connecté à Discord.\n\n"
                        "Lorsque cela sera fait, relance le launcher.",
                icon_type=CustomMessageBox.WARNING,
                buttons=CustomMessageBox.OK
            )
            msg.exec()
            sys.exit(0)  # On quitte proprement sans lancer MainWindow

    # 4. Lancement de l'application si tout est OK
    window = MainWindow(bundle_dir, config)
    # Note: Assure-toi que self.show() est bien dans le __init__ de MainWindow
    # ou ajoute window.show() ici si tu l'en lèves du constructeur.

    sys.exit(app.exec())
