#!/bin/bash

# --- SETUP ---
show_help() {
    echo "Nutzung: $0 -h <host> -u <user> [-p <port>] [-m <mountpunkt>]"
    exit 1
}

PORT=23
TIMEOUT_VAL=5 # Standard-Timeout in Sekunden

while getopts "h:u:p:m:t:" opt; do
    case "$opt" in
        h) HOST=$OPTARG ;;
        u) USER=$OPTARG ;;
        p) PORT=$OPTARG ;;
        m) MOUNT_POINT=$OPTARG ;;
        t) TIMEOUT_VAL=$OPTARG ;;
        *) show_help ;;
    esac
done

[[ -z "$HOST" || -z "$USER" ]] && show_help

# --- CLEANUP BEI ABBRUCH ---
cleanup() {
    tput cnorm # Cursor wieder herstellen
    echo -e "\n\n${RED}[!] Abbruch durch Nutzer.${NC}"
    exit 1
}
trap cleanup SIGINT SIGTERM

# --- OPTIK ---
CYAN='\033[0;36m'
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'
CHECK_PREFIX="[Prüfe]"

# --- SPINNER ---
spinner() {
    local pid=$1
    local delay=0.1
    local spinstr='|/-\'
    tput civis 
    while kill -0 "$pid" 2>/dev/null; do
        local temp=${spinstr#?}
        printf " [%c] " "$spinstr"
        local spinstr=$temp${spinstr%"$temp"}
        sleep $delay
        printf "\b\b\b\b\b"
    done
    printf "     \b\b\b\b\b"
    tput cnorm
}

# --- WRAPPER FÜR PRÜFUNGEN ---
run_check() {
    local message=$1
    local check_cmd=$2
    
    printf "%-40s" "$message"
    
    # Der eigentliche Befehl wird mit dem 'timeout' Tool gekapselt
    eval "timeout $TIMEOUT_VAL $check_cmd" > /dev/null 2>&1 &
    local pid=$!
    
    spinner "$pid"
    wait "$pid"
    local exit_status=$?
    
    if [ $exit_status -eq 0 ]; then
        echo -e "${GREEN}$CHECK_PREFIX Erfolgreich${NC}"
    elif [ $exit_status -eq 124 ]; then
        echo -e "${RED}$CHECK_PREFIX Timeout (${TIMEOUT_VAL}s)${NC}"
    else
        echo -e "${RED}$CHECK_PREFIX Fehlgeschlagen${NC}"
    fi
}

# --- START ---
echo -e "${CYAN}--- Hetzner Storage Box Status (Timeout: ${TIMEOUT_VAL}s) ---${NC}\n"

# 1. Ping (Kürzeres Timeout von 2s für flüssiges Gefühl)
run_check "Netzwerk-Verbindung (Ping)" "ping -c 1 -W 2 $HOST"

# 2. SSH/SFTP (Port 23 oder Parameter)
# Nutzt /dev/tcp für den Portcheck
run_check "Protokoll: SSH/SFTP (Port $PORT)" "bash -c 'echo > /dev/tcp/$HOST/$PORT'"

# 3. Samba (Port 445)
run_check "Protokoll: Samba/CIFS (Port 445)" "bash -c 'echo > /dev/tcp/$HOST/445'"

# 4. Mount-Check
if [[ -n "$MOUNT_POINT" ]]; then
    run_check "Lokaler Mount ($MOUNT_POINT)" "mountpoint -q $MOUNT_POINT"
fi

echo -e "\n${CYAN}--- Prüfung beendet ---${NC}"
