#!/usr/bin/env bash
set -euo pipefail

CACHE_FILE="/tmp/f2b-container"

resolve_container() {
    # 1. Versuch: Compose Label
    local c
    c=$(docker ps \
        --filter "label=com.docker.compose.service=fail2ban" \
        --format '{{.Names}}' \
        | head -n 1)

    if [[ -n "$c" ]]; then
        echo "$c"
        return
    fi

    # 2. Fallback: Kandidaten
    local CANDIDATES=("fail2ban" "fail-2-ban" "f2b")

    for name in "${CANDIDATES[@]}"; do
        if docker ps --format '{{.Names}}' | grep -qx "$name"; then
            echo "$name"
            return
        fi
    done

    return 1
}

# --- Cache verwenden ---
if [[ -f "$CACHE_FILE" ]]; then
    CONTAINER=$(<"$CACHE_FILE")

    # prüfen ob er noch läuft
    if ! docker ps --format '{{.Names}}' | grep -qx "$CONTAINER"; then
        CONTAINER=""
    fi
else
    CONTAINER=""
fi

# --- neu auflösen wenn nötig ---
if [[ -z "${CONTAINER:-}" ]]; then
    CONTAINER=$(resolve_container || true)

    if [[ -z "$CONTAINER" ]]; then
        echo "❌ Kein fail2ban-Container gefunden"
        exit 1
    fi

    echo "$CONTAINER" > "$CACHE_FILE"
fi

# --- Aufruf ---
if [[ $# -eq 0 ]]; then
    docker exec -i "$CONTAINER" fail2ban-client -h
else
    docker exec -i "$CONTAINER" fail2ban-client "$@"
fi