#!/usr/bin/env python3.11
"""
Script zum Einrichten der Tapo-Steckdosen in der Datenbank
Hardkodierte IPs: 192.168.0.100 - 192.168.0.106 (außer 105)
"""

import sys
import os

# Pfad zum Backend-Verzeichnis hinzufügen
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

from models import get_db_session, Printer
from utils.logging_config import get_logger

logger = get_logger("tapo_setup")

def setup_tapo_outlets():
    """Richtet die hardkodierten Tapo-Steckdosen-IPs in der Datenbank ein."""
    
    # Hardkodierte IP-Adressen (192.168.0.100 - 192.168.0.106, außer 105)
    tapo_ips = [
        "192.168.0.100",
        "192.168.0.101", 
        "192.168.0.102",
        "192.168.0.103",
        "192.168.0.104",
        "192.168.0.106"  # 105 ist ausgenommen
    ]
    
    db_session = get_db_session()
    
    try:
        for i, ip in enumerate(tapo_ips, start=1):
            # Prüfen ob bereits vorhanden
            existing_printer = db_session.query(Printer).filter(
                Printer.plug_ip == ip
            ).first()
            
            if existing_printer:
                logger.info(f"✅ Tapo-Steckdose {ip} bereits vorhanden (Drucker: {existing_printer.name})")
                continue
            
            # Neuen Drucker-Eintrag erstellen
            printer_name = f"Tapo P110 ({ip})"
            location = f"Werk 040 - Berlin - TBA"
            
            new_printer = Printer(
                name=printer_name,
                model="P115",  # Tapo P110/P115 Modell
                location=location,
                ip_address=ip,
                mac_address=f"00:00:00:00:{int(ip.split('.')[-1]):02d}:00",  # Dummy MAC
                plug_ip=ip,  # Wichtig: plug_ip für Tapo-Steuerung
                plug_username="tapo_user",  # Standard Tapo-Benutzername
                plug_password="tapo_pass",  # Standard Tapo-Passwort
                active=True
            )
            
            db_session.add(new_printer)
            logger.info(f"➕ Tapo-Steckdose {ip} hinzugefügt: {printer_name}")
        
        # Änderungen speichern
        db_session.commit()
        logger.info(f"🎉 Setup abgeschlossen: {len(tapo_ips)} Tapo-Steckdosen konfiguriert")
        
        # Status anzeigen
        show_tapo_status(db_session)
        
    except Exception as e:
        db_session.rollback()
        logger.error(f"❌ Fehler beim Setup: {e}")
        raise
    finally:
        db_session.close()

def show_tapo_status(db_session):
    """Zeigt den aktuellen Status aller Tapo-Steckdosen an."""
    
    tapo_printers = db_session.query(Printer).filter(
        Printer.plug_ip.isnot(None),
        Printer.active == True
    ).order_by(Printer.plug_ip).all()
    
    logger.info(f"\n📊 Tapo-Steckdosen Übersicht ({len(tapo_printers)} konfiguriert):")
    logger.info("=" * 80)
    
    for printer in tapo_printers:
        logger.info(f"  📍 {printer.plug_ip} - {printer.name}")
        logger.info(f"     Standort: {printer.location}")
        logger.info(f"     Aktiv: {'✅' if printer.active else '❌'}")
        logger.info("-" * 60)

def remove_all_tapo_outlets():
    """Entfernt alle Tapo-Steckdosen aus der Datenbank (Cleanup-Funktion)."""
    
    db_session = get_db_session()
    
    try:
        tapo_printers = db_session.query(Printer).filter(
            Printer.plug_ip.isnot(None)
        ).all()
        
        count = len(tapo_printers)
        
        if count == 0:
            logger.info("ℹ️ Keine Tapo-Steckdosen in der Datenbank gefunden")
            return
        
        for printer in tapo_printers:
            logger.info(f"🗑️ Entferne: {printer.name} ({printer.plug_ip})")
            db_session.delete(printer)
        
        db_session.commit()
        logger.info(f"✅ {count} Tapo-Steckdosen erfolgreich entfernt")
        
    except Exception as e:
        db_session.rollback()
        logger.error(f"❌ Fehler beim Entfernen: {e}")
        raise
    finally:
        db_session.close()

if __name__ == "__main__":
    import argparse
    
    parser = argparse.ArgumentParser(description="Tapo-Steckdosen Setup")
    parser.add_argument("--setup", action="store_true", help="Tapo-Steckdosen einrichten")
    parser.add_argument("--status", action="store_true", help="Status anzeigen")
    parser.add_argument("--cleanup", action="store_true", help="Alle Tapo-Steckdosen entfernen")
    
    args = parser.parse_args()
    
    if args.setup:
        logger.info("🔧 Starte Tapo-Steckdosen Setup...")
        setup_tapo_outlets()
    elif args.status:
        logger.info("📊 Zeige Tapo-Status...")
        db_session = get_db_session()
        try:
            show_tapo_status(db_session)
        finally:
            db_session.close()
    elif args.cleanup:
        logger.info("🗑️ Starte Cleanup...")
        remove_all_tapo_outlets()
    else:
        logger.info("📋 Verwendung:")
        logger.info("  python3.11 setup_tapo_outlets.py --setup    # Steckdosen einrichten")
        logger.info("  python3.11 setup_tapo_outlets.py --status   # Status anzeigen")
        logger.info("  python3.11 setup_tapo_outlets.py --cleanup  # Alle entfernen") 