#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
SOFORT-TEST für TP-Link Tapo P110-Steckdosen
Nutzt direkt PyP100 mit hardkodierten Anmeldedaten
"""

import os
import sys
import time
from datetime import datetime

# TAPO Anmeldedaten direkt hardkodiert (wie in den funktionierenden Versionen)
os.environ["TAPO_USERNAME"] = "till.tomczak@mercedes-benz.com"
os.environ["TAPO_PASSWORD"] = "744563017196A"  # Das 'A' am Ende ist wichtig

# IPs der Steckdosen
TAPO_IPS = [
    "192.168.0.103",
    "192.168.0.104",
    "192.168.0.100", 
    "192.168.0.101",
    "192.168.0.102"
]

def log(msg):
    """Protokolliert eine Nachricht mit Zeitstempel"""
    timestamp = datetime.now().strftime("%H:%M:%S")
    print(f"[{timestamp}] {msg}")

def test_connection():
    """Teste Verbindung zu den Steckdosen"""
    log("🔄 Teste PyP100-Import...")
    
    try:
        from PyP100 import PyP100
        log("✅ PyP100-Modul erfolgreich importiert")
    except ImportError:
        log("❌ PyP100-Modul nicht gefunden. Installiere es...")
        try:
            import subprocess
            subprocess.run([sys.executable, "-m", "pip", "install", "PyP100==0.0.12"], check=True)
            from PyP100 import PyP100
            log("✅ PyP100-Modul installiert")
        except Exception as e:
            log(f"❌ Fehler bei Installation: {str(e)}")
            return False
    
    # Anmeldedaten aus Umgebungsvariablen lesen
    username = os.environ.get("TAPO_USERNAME")
    password = os.environ.get("TAPO_PASSWORD")
    
    log(f"👤 Benutzername: {username}")
    log(f"🔑 Passwort: {password}")
    
    # Teste jede IP
    success = False
    
    for ip in TAPO_IPS:
        log(f"🔄 Teste Steckdose mit IP: {ip}")
        
        try:
            # Wichtig: Verwende PyP100 (nicht PyP110) wie in den funktionierenden Versionen
            p100 = PyP100.P100(ip, username, password)
            
            # Handshake und Login
            log("   🔄 Handshake...")
            p100.handshake()
            
            log("   🔄 Login...")
            p100.login()
            
            # Status abfragen
            log("   🔄 Status abfragen...")
            device_info = p100.getDeviceInfo()
            
            # Erfolg!
            state = "Eingeschaltet" if device_info.get("device_on", False) else "Ausgeschaltet"
            log(f"✅ ERFOLG! Steckdose {ip} erfolgreich verbunden")
            log(f"   📱 Name: {device_info.get('nickname', 'Unbekannt')}")
            log(f"   ⚡ Status: {state}")
            
            # Steckdose ein-/ausschalten wenn gewünscht
            if "--toggle" in sys.argv:
                if device_info.get("device_on", False):
                    log("   🔄 Schalte Steckdose AUS...")
                    p100.turnOff()
                else:
                    log("   🔄 Schalte Steckdose EIN...")
                    p100.turnOn()
                
                time.sleep(1)
                
                # Neuen Status abrufen
                device_info = p100.getDeviceInfo()
                state = "Eingeschaltet" if device_info.get("device_on", False) else "Ausgeschaltet"
                log(f"   ⚡ Neuer Status: {state}")
            
            success = True
            
            # Konfiguration für settings.py ausgeben
            log("\n✅ KONFIGURATION FÜR SETTINGS.PY:")
            log(f"""
# TP-Link Tapo Standard-Anmeldedaten
TAPO_USERNAME = "{username}"
TAPO_PASSWORD = "{password}"

# Standard-Steckdosen-IPs
DEFAULT_TAPO_IPS = ["{ip}"]
""")
            
            # Nur die erste erfolgreiche Steckdose testen
            break
            
        except Exception as e:
            log(f"❌ Fehler bei Steckdose {ip}: {str(e)}")
    
    if not success:
        log("\n❌ Keine Tapo-Steckdose konnte verbunden werden!")
        log("Prüfen Sie folgende mögliche Ursachen:")
        log("1. Steckdosen sind nicht eingesteckt oder mit dem WLAN verbunden")
        log("2. IP-Adressen sind falsch")
        log("3. Anmeldedaten sind falsch (prüfen Sie das 'A' am Ende des Passworts)")
        log("4. Netzwerkprobleme verhindern den Zugriff")
    
    return success

if __name__ == "__main__":
    print("\n====== TAPO P110 SOFORT-TEST ======\n")
    test_connection()
    print("\n====== TEST BEENDET ======\n") 