#!/usr/bin/env bash

# ==============================================================================
# Linux Toolbox - Główny skrypt uruchomieniowy
# Użycie:
#   bash -c "$(curl -fsSL https://sh.furxe.net/run.sh)"
#   curl -fsSL https://sh.furxe.net/run.sh | bash
#   curl -fsSL https://sh.furxe.net | bash
#   ./run.sh (lokalnie)
# ==============================================================================

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)"

# ==============================================================================
# KONFIGURACJA ZDALNA (Cloudflare Pages: https://sh.furxe.net)
# ==============================================================================
BASE_URL="${SCRIPTS_BASE_URL:-https://sh.furxe.net}"

# Kolory
RED='\033[1;31m'
GREEN='\033[1;32m'
YELLOW='\033[1;33m'
BLUE='\033[1;34m'
CYAN='\033[1;36m'
BOLD='\033[1m'
NC='\033[0m'

# Bezpieczny odczyt wejścia od użytkownika (działa zarówno lokalnie jak i przy curl | bash)
read_choice() {
    local prompt="$1"
    local var_name="$2"
    local default_val="$3"
    local input=""

    if [ -t 0 ]; then
        read -rp "$prompt" input
    elif [ -r /dev/tty ]; then
        read -rp "$prompt" input < /dev/tty 2>/dev/null || input="$default_val"
    else
        input="$default_val"
    fi

    input="${input:-$default_val}"
    printf -v "$var_name" '%s' "$input"
}

detect_distro() {
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        case "$ID" in
            arch|manjaro|endeavouros|garuda|cachyos) echo "arch" ;;
            debian|ubuntu|linuxmint|pop|kali|elementary) echo "debian" ;;
            *)
                if [ -n "${ID_LIKE:-}" ]; then
                    case "$ID_LIKE" in
                        *arch*) echo "arch" ;;
                        *debian*|*ubuntu*) echo "debian" ;;
                        *) echo "unknown" ;;
                    esac
                else
                    echo "unknown"
                fi
                ;;
        esac
    else
        echo "unknown"
    fi
}

run_target_script() {
    local os="$1"
    local script_name="$2"
    local local_path="$SCRIPT_DIR/$os/$script_name"

    # Sprawdź, czy plik istnieje lokalnie w repozytorium
    if [ -f "$local_path" ]; then
        echo -e "${BLUE}[INFO]${NC} Uruchamianie lokalnego skryptu: $local_path"
        if [ ! -t 0 ] && [ -r /dev/tty ]; then
            bash "$local_path" < /dev/tty
        else
            bash "$local_path"
        fi
        return $?
    fi

    # Jeśli nie ma pliku lokalnie, pobierz z serwera
    local script_url="$BASE_URL/$os/$script_name"
    echo -e "${BLUE}[INFO]${NC} Pobieranie i uruchamianie: $script_url"
    
    local tmp_file
    tmp_file=$(mktemp)
    if curl -fsSL "$script_url" -o "$tmp_file"; then
        if [ ! -t 0 ] && [ -r /dev/tty ]; then
            bash "$tmp_file" < /dev/tty
        else
            bash "$tmp_file"
        fi
        local status=$?
        rm -f "$tmp_file"
        return $status
    else
        echo -e "${RED}[BŁĄD]${NC} Nie udało się pobrać skryptu z $script_url"
        echo "Upewnij się, że plik istnieje na serwerze i połączenie z siecią jest aktywne."
        rm -f "$tmp_file"
        return 1
    fi
}

# ==============================================================================
# MENU GŁÓWNE
# ==============================================================================
clear 2>/dev/null || true
echo -e "${CYAN}====================================================${NC}"
echo -e "${BOLD}       Linux Toolbox - Katalog Skryptów             ${NC}"
echo -e "${CYAN}====================================================${NC}"

DETECTED_OS=$(detect_distro)
echo -e "Wykryte środowisko: ${GREEN}$DETECTED_OS${NC}"
echo ""
echo "Wybierz dystrybucję docelową:"
echo "1) Arch Linux (oraz Manjaro, EndeavourOS, itp.)"
echo "2) Debian / Ubuntu (oraz Linux Mint, Pop!_OS, itp.)"
echo "3) Użyj automatycznie wykrytej ($DETECTED_OS)"
echo "0) Wyjście"
echo ""

read_choice "Twój wybór (0-3) [3]: " distro_choice "3"

case "$distro_choice" in
    1) OS="arch" ;;
    2) OS="debian" ;;
    3)
        if [ "$DETECTED_OS" = "unknown" ]; then
            echo -e "${RED}[BŁĄD]${NC} Nie rozpoznano automatycznie dystrybucji. Wybierz 1 lub 2."
            exit 1
        fi
        OS="$DETECTED_OS"
        ;;
    0)
        echo "Wyjście."
        exit 0
        ;;
    *)
        echo -e "${RED}Nieprawidłowy wybór!${NC}"
        exit 1
        ;;
esac

echo -e "\nWybrane środowisko: ${GREEN}$OS${NC}"
echo "----------------------------------------------------"

if [ "$OS" = "debian" ]; then
    echo -e "${BOLD}Dostępne skrypty dla Debian / Ubuntu:${NC}"
    echo "1) Główne menu interaktywne (main.sh)"
    echo "2) Docker - Instalacja (docker-install.sh)"
    echo "3) Docker - Deinstalacja (docker-rm.sh)"
    echo "4) Grafana - Instalacja (grafana-install.sh)"
    echo "5) Lunar Client - Instalacja (lunarclient.sh)"
    echo "6) Narzędzia deweloperskie (dev_setup.sh)"
    echo "7) Narzędzia podstawowe (base_tools.sh)"
    echo "8) Informacje o systemie (info.sh)"
    echo "9) Inny (podaj własną nazwę pliku)"
    echo "0) Wyjście"
    echo ""
    read_choice "Wybierz skrypt (0-9) [1]: " script_choice "1"

    case "$script_choice" in
        1) SCRIPT_NAME="main.sh" ;;
        2) SCRIPT_NAME="docker-install.sh" ;;
        3) SCRIPT_NAME="docker-rm.sh" ;;
        4) SCRIPT_NAME="grafana-install.sh" ;;
        5) SCRIPT_NAME="lunarclient.sh" ;;
        6) SCRIPT_NAME="dev_setup.sh" ;;
        7) SCRIPT_NAME="base_tools.sh" ;;
        8) SCRIPT_NAME="info.sh" ;;
        9) read_choice "Podaj nazwę skryptu (np. custom.sh): " SCRIPT_NAME "main.sh" ;;
        0) exit 0 ;;
        *) echo -e "${RED}Nieprawidłowy wybór!${NC}"; exit 1 ;;
    esac

elif [ "$OS" = "arch" ]; then
    echo -e "${BOLD}Dostępne skrypty dla Arch Linux:${NC}"
    echo "1) Główne menu interaktywne (main.sh)"
    echo "2) Fast Setup - Szybka instalacja PC (fast-setup.sh)"
    echo "3) AUR Helpers - yay / paru (aur-helpers.sh)"
    echo "4) Java OpenJDK - Wybór wersji (java.sh)"
    echo "5) Lunar Client - Instalator (lunarclient.sh)"
    echo "6) Narzędzia deweloperskie (dev_setup.sh)"
    echo "7) Narzędzia podstawowe (base_tools.sh)"
    echo "8) Informacje o systemie (info.sh)"
    echo "9) Inny (podaj własną nazwę pliku)"
    echo "0) Wyjście"
    echo ""
    read_choice "Wybierz skrypt (0-9) [1]: " script_choice "1"

    case "$script_choice" in
        1) SCRIPT_NAME="main.sh" ;;
        2) SCRIPT_NAME="fast-setup.sh" ;;
        3) SCRIPT_NAME="aur-helpers.sh" ;;
        4) SCRIPT_NAME="java.sh" ;;
        5) SCRIPT_NAME="lunarclient.sh" ;;
        6) SCRIPT_NAME="dev_setup.sh" ;;
        7) SCRIPT_NAME="base_tools.sh" ;;
        8) SCRIPT_NAME="info.sh" ;;
        9) read_choice "Podaj nazwę skryptu (np. custom.sh): " SCRIPT_NAME "main.sh" ;;
        0) exit 0 ;;
        *) echo -e "${RED}Nieprawidłowy wybór!${NC}"; exit 1 ;;
    esac
fi

run_target_script "$OS" "$SCRIPT_NAME"
EXIT_STATUS=$?

if [ $EXIT_STATUS -eq 0 ]; then
    echo -e "\n${GREEN}Zakończono pomyślnie!${NC}"
else
    echo -e "\n${RED}Skrypt zakończył się kodem błędu: $EXIT_STATUS.${NC}"
fi
exit $EXIT_STATUS
