#!/bin/bash
# ensure-de-layout.sh — Stellt KDE-Tastaturlayout auf Deutsch (de) sicher.
# Läuft als root (Pacman-Hook) oder als normaler User (KDE-Autostart).
# Benutzer wird automatisch erkannt – kein manuelles Anpassen nötig.

# ── Benutzer ermitteln ───────────────────────────────────────────────────────
if [ "$(id -u)" = "0" ]; then
    # Als root: aktiven Wayland/X11-Session-User suchen
    USER_NAME=$(loginctl list-sessions --no-legend 2>/dev/null | \
        while read -r sess uid uname rest; do
            [ "$uname" = "root" ] && continue
            type=$(loginctl show-session "$sess" -p Type --value 2>/dev/null)
            if [ "$type" = "wayland" ] || [ "$type" = "x11" ]; then
                echo "$uname"; break
            fi
        done)
    # Fallback: erster normaler User in /home
    [ -z "$USER_NAME" ] && USER_NAME=$(getent passwd | \
        awk -F: '$3>=1000 && $6~/^\/home\// && $7!="/sbin/nologin" && $7!="/bin/false" {print $1}' | \
        head -1)
    KXKBRC="/home/$USER_NAME/.config/kxkbrc"
else
    USER_NAME="$(whoami)"
    KXKBRC="$HOME/.config/kxkbrc"
fi

if [ -z "$USER_NAME" ]; then
    echo "[keyboard-de] Kein Benutzer gefunden – abgebrochen." >&2
    exit 1
fi

# ── kxkbrc prüfen und reparieren ────────────────────────────────────────────
fix_kxkbrc() {
    local file="$1"

    grep -q "^LayoutList=de$" "$file" 2>/dev/null && return 0

    echo "[keyboard-de] Layout nicht 'de' bei $USER_NAME – stelle wieder her..."
    cp "$file" "${file}.bak.$(date +%Y%m%d%H%M%S)" 2>/dev/null

    if grep -q "^\[Layout\]" "$file" 2>/dev/null; then
        if grep -q "^LayoutList=" "$file"; then
            sed -i 's/^LayoutList=.*/LayoutList=de/' "$file"
        else
            sed -i '/^\[Layout\]/a LayoutList=de' "$file"
        fi
        if grep -q "^Use=" "$file"; then
            sed -i 's/^Use=.*/Use=true/' "$file"
        else
            sed -i '/^LayoutList=de/a Use=true' "$file"
        fi
    else
        printf '\n[Layout]\nLayoutList=de\nUse=true\n' >> "$file"
    fi

    [ "$(id -u)" = "0" ] && chown "$USER_NAME:$USER_NAME" "$file"
    echo "[keyboard-de] $file wiederhergestellt."
}

# ── Live anwenden via DBus (falls Session läuft) ────────────────────────────
apply_live() {
    local uid
    uid=$(id -u "$USER_NAME" 2>/dev/null)
    [ -S "/run/user/$uid/bus" ] || return 0

    sudo -u "$USER_NAME" \
        DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$uid/bus" \
        qdbus6 org.kde.keyboard /Layouts setLayout 0 2>/dev/null || true
    sudo -u "$USER_NAME" \
        DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$uid/bus" \
        qdbus6 org.kde.KWin /KWin reconfigure 2>/dev/null || true
    echo "[keyboard-de] Live auf KWin angewendet."
}

fix_kxkbrc "$KXKBRC"
apply_live
