#!/bin/bash

set -o pipefail

CONTAINER="thelounge"

# Ellenőrzés: Docker elérhető?
if ! command -v docker >/dev/null 2>&1; then
    echo "❌ A Docker nem található."
    exit 1
fi

# Ellenőrzés: Docker daemon fut?
if ! docker info >/dev/null 2>&1; then
    echo "❌ A Docker daemon nem fut vagy nem elérhető."
    exit 1
fi

# Ellenőrzés: konténer létezik?
if ! docker inspect "$CONTAINER" >/dev/null 2>&1; then
    echo "❌ A '$CONTAINER' konténer nem található."
    exit 1
fi

# Ellenőrzés: konténer fut?
if [ "$(docker inspect -f '{{.State.Running}}' "$CONTAINER")" != "true" ]; then
    echo "❌ A '$CONTAINER' konténer nem fut."
    exit 1
fi

pause() {
    echo
    read -rp "Nyomj ENTER-t a folytatáshoz..."
}

user_exists() {
    docker exec "$CONTAINER" thelounge list 2>&1 |
        sed -nE 's/^.*\[INFO\] [0-9]+\. (.*)$/\1/p' |
        grep -qxF "$1"
}

list_users() {
    docker exec "$CONTAINER" thelounge list 2>&1 | sed -nE 's/^.*\[INFO\] ([0-9]+\. .+)$/\1/p'
}

filter_warnings() {
    sed -uE '/\[WARN\]|ExperimentalWarning|trace-warnings/d'
}

while true; do
    clear

    echo "╔══════════════════════════════════════╗"
    echo "║       TheLounge User Manager         ║"
    echo "╠══════════════════════════════════════╣"
    echo "║  1) User hozzáadása                  ║"
    echo "║  2) User törlése                     ║"
    echo "║  3) User lista                       ║"
    echo "║  4) Jelszó módosítása                ║"
    echo "║  5) Kilépés                          ║"
    echo "╚══════════════════════════════════════╝"
    echo

    read -rp "Válassz [1-5]: " choice

    case "$choice" in

        1)
            clear
            echo "════════ User hozzáadása ════════"
            echo

            read -rp "Felhasználónév: " username

            if [ -z "$username" ]; then
                echo "❌ A felhasználónév nem lehet üres."
                pause
                continue
            fi

            if user_exists "$username"; then
                echo "❌ '$username' felhasználó már létezik."
                pause
                continue
            fi

            read -rsp "Jelszó: " password
            echo
            read -rsp "Jelszó újra: " password2
            echo

            if [ -z "$password" ] || [ "$password" != "$password2" ]; then
                echo "❌ A jelszó üres vagy a két jelszó nem egyezik."
                pause
                continue
            fi

            read -rp "Naplók mentése a lemezre? [I/n]: " save_logs
            save_logs="${save_logs:-i}"

            echo
            add_args=(add "$username" --password "$password")
            [[ "$save_logs" =~ ^[iI]$ ]] && add_args+=(--save-logs)

            if output=$(docker exec "$CONTAINER" thelounge "${add_args[@]}" 2>&1 | filter_warnings); then
                echo "✅ '$username' hozzáadva."
            else
                echo "❌ Hiba a hozzáadás során."
                [ -n "$output" ] && echo "$output"
            fi

            pause
            ;;

        2)
            clear
            echo "════════ User törlése ════════"
            echo

            list_users

            echo
            read -rp "Törlendő felhasználó: " username

            if [ -z "$username" ]; then
                echo "❌ A felhasználónév nem lehet üres."
                pause
                continue
            fi

            echo
            read -rp "Biztosan törlöd '$username' felhasználót? [i/N]: " confirm

            if [[ "$confirm" =~ ^[iI]$ ]]; then
                if user_exists "$username"; then
                    if output=$(docker exec "$CONTAINER" thelounge remove "$username" 2>&1 | filter_warnings); then
                        echo "✅ '$username' törölve."
                    else
                        echo "❌ Hiba a törlés során."
                        [ -n "$output" ] && echo "$output"
                    fi
                else
                    echo "❌ '$username' felhasználó nem létezik."
                fi
            else
                echo "↩ Művelet megszakítva."
            fi

            pause
            ;;

        3)
            clear
            echo "════════ TheLounge userek ════════"
            echo

            list_users

            pause
            ;;

        4)
            clear
            echo "════════ Jelszó módosítása ════════"
            echo

            list_users

            echo
            read -rp "Felhasználónév: " username

            if [ -z "$username" ]; then
                echo "❌ A felhasználónév nem lehet üres."
                pause
                continue
            fi

            echo
            if user_exists "$username"; then
                read -rsp "Új jelszó: " password
                echo
                read -rsp "Új jelszó újra: " password2
                echo

                if [ -z "$password" ] || [ "$password" != "$password2" ]; then
                    echo "❌ A jelszó üres vagy a két jelszó nem egyezik."
                else
                    if output=$(docker exec "$CONTAINER" thelounge reset "$username" --password "$password" 2>&1 | filter_warnings); then
                        echo "✅ '$username' jelszava módosítva."
                    else
                        echo "❌ Hiba a jelszó módosítása során."
                        [ -n "$output" ] && echo "$output"
                    fi
                fi
            else
                echo "❌ '$username' felhasználó nem létezik."
            fi

            pause
            ;;

        5)
            clear
            exit 0
            ;;

        *)
            echo
            echo "❌ Érvénytelen választás."
            sleep 1
            ;;

    esac
done
