import os
import sys
import time
import logging
from gologin import GoLogin
from pyvirtualdisplay import Display

# --- Konfiguration ---
# ! WICHTIG: Ersetze die Platzhalter durch deine echten Daten !
TEST_TOKEN = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI2ODQzMzQ5MjIwMDMwYjQ0OTdlZmVmN2YiLCJ0eXBlIjoiZGV2Iiwiand0aWQiOiI2ODQ0NDA0MDYyNjQ0YWU1NzQ5ODI2MWMifQ.vj-RJv3gm0KpGnb0fAtmipDS2pDnLAFlDik8QKpsc8A'
TEST_PROFILE_ID = '6888ba48651365a69590048b'  # Dies sollte eine gültige ID sein
VIRTUAL_DISPLAY_ENABLED = True  # Setze dies auf False, falls du keinen vServer mit Xvfb/pyvirtualdisplay hast
# --- Ende Konfiguration ---

# Logging einrichten
logging.basicConfig(level=logging.INFO, 
                    format='%(asctime)s - %(levelname)s - %(message)s')

def test_gologin_start():
    """Startet und stoppt GoLogin isoliert."""
    
    gl = None
    display = None
    
    logging.info("--- Starte GoLogin-Isolationstest ---")
    logging.info(f"Test-Profile ID: {TEST_PROFILE_ID}")

    if VIRTUAL_DISPLAY_ENABLED:
        try:
            display = Display(visible=0, size=(1920, 1080))
            display.start()
            logging.info("Virtuelle Display-Sitzung gestartet.")
        except Exception as e:
            logging.error(f"Fehler beim Starten des virtuellen Displays: {e}")
            return
            
    try:
        # 1. GoLogin Instanz erstellen
        gl = GoLogin({
            "token": TEST_TOKEN,
            "profile_id": TEST_PROFILE_ID,
            "extra_params": [
                "--no-sandbox",
                "--disable-dev-shm-usage",
                "--enable-unsafe-swiftshader", 
                "--disable-gpu",
                "--disable-audio-output"
            ]
        })
        
        logging.info("GoLogin Instanz erstellt.")

        # 2. GoLogin Session starten
        debugger_address = gl.start()
        
        # 3. Ergebnis prüfen
        if debugger_address:
            logging.info(f"✅ ERFOLG: GoLogin-Session erfolgreich gestartet.")
            logging.info(f"Debugger-Adresse: {debugger_address}")
            time.sleep(2) # Kurze Wartezeit, um den Prozess zu stabilisieren

        else:
            logging.error("❌ FEHLER: gl.start() hat None zurückgegeben. Start fehlgeschlagen.")

    except Exception as e:
        # Fängt den kritischen Fehler ab, wie 'invalid literal for int()'
        logging.error(f"❌ KRITISCHER FEHLER beim Start von GoLogin aufgetreten:")
        logging.error(f"Fehlertyp: {type(e).__name__}")
        logging.error(f"Fehlermeldung: {e}")
        sys.exit(1) # Beende das Programm bei kritischem Fehler
        
    finally:
        # 4. Aufräumen (Stoppen und Display beenden)
        if gl:
            try:
                gl.stop()
                logging.info("GoLogin-Session gestoppt und bereinigt.")
            except FileNotFoundError:
                # Fängt den sekundären Fehler ab, wenn das Profil nie erstellt wurde
                logging.warning("GoLogin Profil-Verzeichnis wurde nicht gefunden. Bereinigung übersprungen.")
            except Exception as e:
                logging.error(f"Fehler beim Stoppen der GoLogin-Session: {e}")

        if display:
            try:
                display.stop()
                logging.info("Virtuelle Display-Sitzung beendet.")
            except Exception as e:
                logging.error(f"Fehler beim Beenden des virtuellen Displays: {e}")
                
        logging.info("--- GoLogin-Isolationstest beendet ---")

if __name__ == '__main__':
    # Füge den GoLogin-Pfad hinzu, falls nötig
    # sys.path.append("/usr/local/lib/python3.10/dist-packages") 
    test_gologin_start()