from sqlalchemy import create_engine, text
import os
from dotenv import load_dotenv
import bcrypt

# .env laden (nur in Dev)
if os.getenv("ENV", "development") == "development":
    load_dotenv()

# Use same logic as database.py: prefer DB_CONN, fallback to individual vars
DB_URL = os.getenv("DB_CONN")
if not DB_URL:
    DB_USER = os.getenv("DB_USER", "infoscreen_admin")
    DB_PASSWORD = os.getenv("DB_PASSWORD")
    # In Docker Compose: DB_HOST will be 'db' from env
    # In dev container: will be 'localhost' from .env
    DB_HOST = os.getenv("DB_HOST", "db")  # Default to 'db' for Docker Compose
    DB_NAME = os.getenv("DB_NAME", "infoscreen_by_taa")
    DB_URL = f"mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:3306/{DB_NAME}"

print(f"init_defaults.py connecting to: {DB_URL.split('@')[1] if '@' in DB_URL else DB_URL}")
engine = create_engine(DB_URL, isolation_level="AUTOCOMMIT")

with engine.connect() as conn:
    # Default-Gruppe mit id=1 anlegen, falls nicht vorhanden
    result = conn.execute(
        text("SELECT COUNT(*) FROM client_groups WHERE id=1"))
    if result.scalar() == 0:
        conn.execute(
            text(
                "INSERT INTO client_groups (id, name, is_active) VALUES (1, 'Nicht zugeordnet', 1)")
        )
        print("✅ Default-Gruppe mit id=1 angelegt.")

    # Superadmin-Benutzer anlegen, falls nicht vorhanden
    admin_user = os.getenv("DEFAULT_SUPERADMIN_USERNAME", "superadmin")
    admin_pw = os.getenv("DEFAULT_SUPERADMIN_PASSWORD")
    
    if not admin_pw:
        print("⚠️  DEFAULT_SUPERADMIN_PASSWORD nicht gesetzt. Superadmin wird nicht erstellt.")
    else:
        # Passwort hashen mit bcrypt
        hashed_pw = bcrypt.hashpw(admin_pw.encode(
            'utf-8'), bcrypt.gensalt()).decode('utf-8')
        # Prüfen, ob User existiert
        result = conn.execute(text(
            "SELECT COUNT(*) FROM users WHERE username=:username"), {"username": admin_user})
        if result.scalar() == 0:
            # Rolle: 'superadmin' gemäß UserRole enum
            conn.execute(
                text("INSERT INTO users (username, password_hash, role, is_active) VALUES (:username, :password_hash, 'superadmin', 1)"),
                {"username": admin_user, "password_hash": hashed_pw}
            )
            print(f"✅ Superadmin-Benutzer '{admin_user}' angelegt.")
        else:
            print(f"ℹ️  Superadmin-Benutzer '{admin_user}' existiert bereits.")

        # Default System Settings anlegen
        default_settings = [
            ('supplement_table_url', '', 'URL für Vertretungsplan / WebUntis (Stundenplan-Änderungstabelle)'),
            ('supplement_table_enabled', 'false', 'Ob Vertretungsplan aktiviert ist'),
            ('presentation_interval', '10', 'Standard Intervall für Präsentationen (Sekunden)'),
            ('presentation_page_progress', 'true', 'Seitenfortschrift anzeigen (Page-Progress) für Präsentationen'),
            ('presentation_auto_progress', 'true', 'Automatischer Fortschritt (Auto-Progress) für Präsentationen'),
            ('video_autoplay', 'true', 'Autoplay (automatisches Abspielen) für Videos'),
            ('video_loop', 'true', 'Loop (Wiederholung) für Videos'),
            ('video_volume', '0.8', 'Standard Lautstärke für Videos (0.0 - 1.0)'),
            ('holiday_banner_enabled', 'true', 'Ferienstatus-Banner auf Dashboard anzeigen'),
            ('organization_name', '', 'Name der Organisation (wird im Header angezeigt)'),
            ('refresh_seconds', '0', 'Scheduler Republish-Intervall (Sekunden; 0 deaktiviert)'),
            ('group_order', '[]', 'Benutzerdefinierte Reihenfolge der Raumgruppen (JSON-Array mit Group-IDs)'),
        ]
    
        for key, value, description in default_settings:
            result = conn.execute(
                text("SELECT COUNT(*) FROM system_settings WHERE `key`=:key"),
                {"key": key}
            )
            if result.scalar() == 0:
                conn.execute(
                    text("INSERT INTO system_settings (`key`, value, description) VALUES (:key, :value, :description)"),
                    {"key": key, "value": value, "description": description}
                )
                print(f"✅ System-Einstellung '{key}' angelegt.")
            else:
                print(f"ℹ️  System-Einstellung '{key}' existiert bereits.")

    print("✅ Initialisierung abgeschlossen.")
