import os
import shutil
import subprocess
import sys
from pathlib import Path

class Application(object):
    def __init__(self, *args, **kwargs):
        for key in kwargs:
            setattr(self, key, kwargs[key])
        self._hello()

    def _hello(self):
        print(f"NFDOS {getattr(self, 'version', '')} — inicializador de ambiente")

    def run(self):
        self._ensure_venv()
        self.launch_welcome()

    def _ensure_venv(self):
        """Cria e ativa o ambiente virtual, caso ainda não exista."""
        python_working_directory = ("src")
        os.chdir(python_working_directory)
        venv_path = Path("venv")
        if not venv_path.exists():
            print("[+] A criar ambiente virtual...")
            subprocess.run([sys.executable, "-m", "venv", "venv"], check=True)
        else:
            print("[=] Ambiente virtual já existente.")

    def detect_environment(self):
        """Deteta se o ambiente possui interface gráfica GNOME disponível."""
        if os.environ.get("DISPLAY") and shutil.which("gnome-shell"):
            return "tui"
        return "tui"

    def launch_welcome(self):
        """Lança o modo de boas-vindas (texto ou gráfico) consoante o ambiente detetado."""
        mode = self.detect_environment()
        print(f"[✓] Ambiente detetado: {mode}")

        if mode == "gui":
            subprocess.run(["python3", "gui/terminal.py"])
        else:
            subprocess.run(["python3", "tui/main.py"])

