#!/bin/bash
################################################################################
#                                                                              #
#   ██╗███████╗███████╗██╗   ██╗██████╗  ██╗██████╗  ██╗                       #
#   ██║██╔════╝██╔════╝██║   ██║╚════██╗███║╚════██╗███║                       #
#   ██║███████╗███████╗██║   ██║ █████╔╝╚██║ █████╔╝╚██║                       #
#   ██║╚════██║╚════██║██║   ██║ ╚═══██╗ ██║ ╚═══██╗ ██║                       #
#   ██║███████║███████║╚██████╔╝██████╔╝ ██║██████╔╝ ██║                       #
#   ╚═╝╚══════╝╚══════╝ ╚═════╝ ╚═════╝  ╚═╝╚═════╝  ╚═╝                       #
#                                                                              #
#   ████████╗ ██████╗  ██████╗ ██╗     ███████╗███████╗                       #
#   ╚══██╔══╝██╔═══██╗██╔═══██╗██║     ██╔════╝██╔════╝                       #
#      ██║   ██║   ██║██║   ██║██║     ███████╗███████╗                       #
#      ██║   ██║   ██║██║   ██║██║     ╚════██║╚════██║                       #
#      ██║   ╚██████╔╝╚██████╔╝███████╗███████║███████║                       #
#      ╚═╝    ╚═════╝  ╚═════╝ ╚══════╝╚══════╝╚══════╝                       #
#                                                                              #
#   Linux Installation Tools v1.0.0                                            #
#   Complete Kali Linux Setup & Upgrade Automation                             #
#                                                                              #
#   GitHub  : https://github.com/issu321/Linux-Installation-Tools             #
#   Author  : issu321                                                          #
#   License : MIT                                                              #
#                                                                              #
################################################################################

# ==============================================================================
# STRICT ERROR HANDLING & ENVIRONMENT SETUP
# ==============================================================================
set -o pipefail
export DEBIAN_FRONTEND=noninteractive
export NEEDRESTART_MODE=a
export NEEDRESTART_SUSPEND=1

# ==============================================================================
# GLOBAL VARIABLES & PATHS
# ==============================================================================
SCRIPT_VERSION="1.0.0"
SCRIPT_NAME="ISSU321 Linux Installation Tools"
LOG_DIR="/var/log/issu321-installer"
LOG_FILE="${LOG_DIR}/install-$(date +%Y%m%d-%H%M%S).log"
BACKUP_DIR="${LOG_DIR}/backups"
TEMP_DIR="/tmp/issu321-installer"
REPO_URL="https://github.com/issu321/Linux-Installation-Tools"

# Color Codes
CLR_RESET='\033[0m'
CLR_BLACK='\033[0;30m'
CLR_RED='\033[0;31m'
CLR_GREEN='\033[0;32m'
CLR_YELLOW='\033[0;33m'
CLR_BLUE='\033[0;34m'
CLR_MAGENTA='\033[0;35m'
CLR_CYAN='\033[0;36m'
CLR_WHITE='\033[0;37m'
CLR_BOLD='\033[1m'
CLR_BRED='\033[1;31m'
CLR_BGREEN='\033[1;32m'
CLR_BYELLOW='\033[1;33m'
CLR_BBLUE='\033[1;34m'
CLR_BMAGENTA='\033[1;35m'
CLR_BCYAN='\033[1;36m'
CLR_BWHITE='\033[1;37m'

# ==============================================================================
# UTILITY FUNCTIONS
# ==============================================================================

# --- Logging ---
log() {
    local level="$1"
    local message="$2"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    echo -e "[${timestamp}] [${level}] ${message}" >> "${LOG_FILE}" 2>/dev/null || true
}

log_info()  { log "INFO"  "$1"; }
log_warn()  { log "WARN"  "$1"; }
log_error() { log "ERROR" "$1"; }
log_success(){ log "SUCCESS" "$1"; }

# --- Animated Typewriter Effect ---
typewrite() {
    local text="$1"
    local color="${2:-$CLR_BCYAN}"
    local delay="${3:-0.02}"
    echo -en "${color}"
    for ((i=0; i<${#text}; i++)); do
        echo -n "${text:$i:1}"
        sleep "$delay"
    done
    echo -e "${CLR_RESET}"
}

# --- Fast Typewriter for menus ---
fast_type() {
    local text="$1"
    local color="${2:-$CLR_BWHITE}"
    echo -en "${color}"
    for ((i=0; i<${#text}; i++)); do
        echo -n "${text:$i:1}"
        sleep 0.005
    done
    echo -e "${CLR_RESET}"
}

# --- Spinner Animation (runs in background) ---
spinner() {
    local pid=$1
    local message="$2"
    local spin_chars=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
    local i=0
    echo -en "${CLR_BYELLOW}${message} ${CLR_RESET}"
    while kill -0 "$pid" 2>/dev/null; do
        i=$(( (i+1) % 10 ))
        echo -en "\r${CLR_BYELLOW}${message} ${spin_chars[$i]} ${CLR_RESET}"
        sleep 0.1
    done
    echo -en "\r${CLR_BGREEN}[✓] ${message} Done!${CLR_RESET}\n"
}

# --- Simple progress indicator (no overwrite loop) ---
show_progress() {
    local current=$1
    local total=$2
    local message="$3"
    local pct=$((current * 100 / total))
    echo -e "${CLR_BBLUE}[${current}/${total}] ${pct}% — ${message}${CLR_RESET}"
}

# --- Draw Box ---
draw_box() {
    local text="$1"
    local color="${2:-$CLR_BCYAN}"
    local len=${#text}
    local width=$((len + 4))
    local line=""
    for ((i=0; i<width; i++)); do line+="═"; done
    echo -e "${color}╔${line}╗${CLR_RESET}"
    echo -e "${color}║  ${CLR_BWHITE}${text}${color}  ║${CLR_RESET}"
    echo -e "${color}╚${line}╝${CLR_RESET}"
}

# --- Section Header ---
section_header() {
    local title="$1"
    echo ""
    echo -e "${CLR_BMAGENTA}══════════════════════════════════════════════════════════════════════════════${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}  ▶ ${CLR_BWHITE}${title}${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}══════════════════════════════════════════════════════════════════════════════${CLR_RESET}"
    echo ""
}

# --- Success/Failure Indicators ---
ok_msg()   { echo -e "${CLR_BGREEN}[✓]${CLR_RESET} $1"; log_success "$1"; }
warn_msg() { echo -e "${CLR_BYELLOW}[!]${CLR_RESET} $1"; log_warn "$1"; }
fail_msg() { echo -e "${CLR_BRED}[✗]${CLR_RESET} $1"; log_error "$1"; }
info_msg() { echo -e "${CLR_BBLUE}[ℹ]${CLR_RESET} $1"; log_info "$1"; }

# ==============================================================================
# SYSTEM VALIDATION
# ==============================================================================

check_root() {
    section_header "SYSTEM VALIDATION"
    typewrite "Checking root privileges..." "$CLR_BCYAN" 0.03
    if [ "$EUID" -ne 0 ]; then
        fail_msg "This script must be run as root (use: sudo bash $0)"
        exit 1
    fi
    ok_msg "Root privileges confirmed"
}

check_os() {
    typewrite "Detecting operating system..." "$CLR_BCYAN" 0.03
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        if [[ "$ID" == "kali" ]] || [[ "$ID_LIKE" == *"debian"* && -f /etc/kali-version ]]; then
            ok_msg "Kali Linux detected: $PRETTY_NAME"
        elif [[ "$ID" == "debian" ]] || [[ "$ID_LIKE" == *"debian"* ]]; then
            warn_msg "Debian-based system detected (not Kali). Some tools may differ."
        else
            warn_msg "Non-Debian system detected. Proceed with caution."
        fi
    else
        fail_msg "Cannot detect OS. /etc/os-release not found."
        exit 1
    fi
}

check_internet() {
    typewrite "Testing internet connectivity..." "$CLR_BCYAN" 0.03
    if ! ping -c 1 -W 3 8.8.8.8 >/dev/null 2>&1 && ! ping -c 1 -W 3 1.1.1.1 >/dev/null 2>&1; then
        fail_msg "No internet connection detected. Please connect and retry."
        exit 1
    fi
    ok_msg "Internet connection is active"
}

setup_directories() {
    typewrite "Setting up working directories..." "$CLR_BCYAN" 0.03
    mkdir -p "${LOG_DIR}" "${BACKUP_DIR}" "${TEMP_DIR}" 2>/dev/null || true
    touch "${LOG_FILE}"
    ok_msg "Directories ready at ${LOG_DIR}"
}

backup_sources() {
    typewrite "Backing up APT sources..." "$CLR_BCYAN" 0.03
    if [ -f /etc/apt/sources.list ]; then
        cp /etc/apt/sources.list "${BACKUP_DIR}/sources.list.bak.$(date +%s)" 2>/dev/null || true
    fi
    if [ -d /etc/apt/sources.list.d ]; then
        cp -r /etc/apt/sources.list.d "${BACKUP_DIR}/sources.list.d.bak.$(date +%s)" 2>/dev/null || true
    fi
    ok_msg "APT sources backed up"
}

# ==============================================================================
# ANIMATED BANNER
# ==============================================================================
show_banner() {
    clear
    echo ""
    echo -e "${CLR_BMAGENTA}"
    echo "    ██╗███████╗███████╗██╗   ██╗██████╗  ██╗██████╗  ██╗"
    echo "    ██║██╔════╝██╔════╝██║   ██║╚════██╗███║╚════██╗███║"
    echo "    ██║███████╗███████╗██║   ██║ █████╔╝╚██║ █████╔╝╚██║"
    echo "    ██║╚════██║╚════██║██║   ██║ ╚═══██╗ ██║ ╚═══██╗ ██║"
    echo "    ██║███████║███████║╚██████╔╝██████╔╝ ██║██████╔╝ ██║"
    echo "    ╚═╝╚══════╝╚══════╝ ╚═════╝ ╚═════╝  ╚═╝╚═════╝  ╚═╝"
    echo ""
    echo -e "${CLR_BCYAN}    ████████╗ ██████╗  ██████╗ ██╗     ███████╗███████╗${CLR_RESET}"
    echo -e "${CLR_BCYAN}    ╚══██╔══╝██╔═══██╗██╔═══██╗██║     ██╔════╝██╔════╝${CLR_RESET}"
    echo -e "${CLR_BCYAN}       ██║   ██║   ██║██║   ██║██║     ███████╗███████╗${CLR_RESET}"
    echo -e "${CLR_BCYAN}       ██║   ██║   ██║██║   ██║██║     ╚════██║╚════██║${CLR_RESET}"
    echo -e "${CLR_BCYAN}       ██║   ╚██████╔╝╚██████╔╝███████╗███████║███████║${CLR_RESET}"
    echo -e "${CLR_BCYAN}       ╚═╝    ╚═════╝  ╚═════╝ ╚══════╝╚══════╝╚══════╝${CLR_RESET}"
    echo ""
    echo -e "${CLR_BYELLOW}         ╔═══════════════════════════════════════════╗${CLR_RESET}"
    echo -e "${CLR_BYELLOW}         ║${CLR_BWHITE}   Kali Linux Complete Setup Automation    ${CLR_BYELLOW}║${CLR_RESET}"
    echo -e "${CLR_BYELLOW}         ║${CLR_BWHITE}        Version ${SCRIPT_VERSION} | By issu321         ${CLR_BYELLOW}║${CLR_RESET}"
    echo -e "${CLR_BYELLOW}         ╚═══════════════════════════════════════════╝${CLR_RESET}"
    echo ""
    echo -e "${CLR_BBLUE}    GitHub: ${CLR_BWHITE}${REPO_URL}${CLR_RESET}"
    echo ""
    sleep 0.5
}

# ==============================================================================
# CORE INSTALLATION FUNCTIONS
# ==============================================================================

# --- System Update & Upgrade ---
update_system() {
    section_header "SYSTEM UPDATE & UPGRADE"

    typewrite "Updating package lists..." "$CLR_BCYAN" 0.03
    apt-get update -qq >/dev/null 2>&1 &
    local pid=$!
    spinner "$pid" "Updating package lists"
    wait "$pid"
    if [ $? -eq 0 ]; then
        ok_msg "Package lists updated"
    else
        fail_msg "Failed to update package lists"
        return 1
    fi

    typewrite "Upgrading installed packages..." "$CLR_BCYAN" 0.03
    apt-get upgrade -y -qq >/dev/null 2>&1 &
    pid=$!
    spinner "$pid" "Upgrading packages"
    wait "$pid"
    ok_msg "Packages upgraded"

    typewrite "Performing distribution upgrade..." "$CLR_BCYAN" 0.03
    apt-get dist-upgrade -y -qq >/dev/null 2>&1 &
    pid=$!
    spinner "$pid" "Distribution upgrade"
    wait "$pid"
    ok_msg "Distribution upgrade complete"

    typewrite "Installing firmware and drivers..." "$CLR_BCYAN" 0.03
    apt-get install -y -qq \
        linux-headers-$(uname -r) \
        firmware-linux \
        firmware-linux-free \
        firmware-linux-nonfree \
        firmware-misc-nonfree \
        firmware-realtek \
        firmware-atheros \
        firmware-iwlwifi \
        firmware-brcm80211 \
        broadcom-sta-dkms 2>/dev/null || true
    ok_msg "Drivers and firmware installed"

    typewrite "Cleaning up obsolete packages..." "$CLR_BCYAN" 0.03
    apt-get autoremove -y -qq >/dev/null 2>&1 || true
    apt-get autoclean -qq >/dev/null 2>&1 || true
    ok_msg "System cleaned"
}

# --- Full System Upgrade (Option 2) ---
full_system_upgrade() {
    section_header "FULL SYSTEM UPGRADE MODE"

    typewrite "Starting comprehensive system upgrade..." "$CLR_BRED" 0.04

    info_msg "Step 1/5: Updating package lists"
    apt-get update -y >/dev/null 2>&1 &
    spinner "$!" "apt-get update"
    wait

    info_msg "Step 2/5: Standard upgrade"
    apt-get upgrade -y >/dev/null 2>&1 &
    spinner "$!" "apt-get upgrade"
    wait

    info_msg "Step 3/5: Distribution upgrade"
    apt-get dist-upgrade -y >/dev/null 2>&1 &
    spinner "$!" "apt-get dist-upgrade"
    wait

    info_msg "Step 4/5: Full upgrade (includes new dependencies)"
    apt-get full-upgrade -y >/dev/null 2>&1 &
    spinner "$!" "apt-get full-upgrade"
    wait

    info_msg "Step 5/5: Upgrading Python pip packages"
    if command -v pip3 >/dev/null 2>&1; then
        pip3 install --upgrade pip setuptools wheel 2>/dev/null || true
        # Upgrade common pip packages safely - only a few at a time
        local pip_packages=(requests beautifulsoup4 lxml selenium)
        for pkg in "${pip_packages[@]}"; do
            pip3 install --upgrade "$pkg" 2>/dev/null || true
        done
        ok_msg "pip packages upgraded"
    else
        warn_msg "pip3 not found, installing..."
        apt-get install -y -qq python3-pip >/dev/null 2>&1
        pip3 install --upgrade pip 2>/dev/null || true
    fi

    typewrite "Installing latest kernel and headers..." "$CLR_BCYAN" 0.03
    apt-get install -y -qq linux-image-amd64 linux-headers-amd64 2>/dev/null || true

    typewrite "Updating all firmware..." "$CLR_BCYAN" 0.03
    apt-get install -y -qq firmware-linux firmware-linux-nonfree 2>/dev/null || true

    typewrite "Final cleanup..." "$CLR_BCYAN" 0.03
    apt-get autoremove -y -qq >/dev/null 2>&1 || true
    apt-get autoclean -qq >/dev/null 2>&1 || true

    ok_msg "FULL SYSTEM UPGRADE COMPLETE!"
    draw_box "System is fully upgraded and optimized" "$CLR_BGREEN"
}

# --- Install VS Code ---
install_vscode() {
    section_header "INSTALLING VISUAL STUDIO CODE"

    if command -v code >/dev/null 2>&1; then
        ok_msg "VS Code is already installed"
        return 0
    fi

    typewrite "Adding Microsoft GPG key..." "$CLR_BCYAN" 0.03
    wget -qO- https://packages.microsoft.com/keys/microsoft.asc 2>/dev/null | gpg --dearmor > /usr/share/keyrings/microsoft-archive-keyring.gpg 2>/dev/null || \
    curl -fsSL https://packages.microsoft.com/keys/microsoft.asc 2>/dev/null | gpg --dearmor > /usr/share/keyrings/microsoft-archive-keyring.gpg 2>/dev/null

    typewrite "Adding VS Code repository..." "$CLR_BCYAN" 0.03
    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft-archive-keyring.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list

    typewrite "Installing VS Code..." "$CLR_BCYAN" 0.03
    apt-get update -qq >/dev/null 2>&1
    apt-get install -y -qq code 2>/dev/null &
    spinner "$!" "Installing VS Code"
    wait

    if command -v code >/dev/null 2>&1; then
        ok_msg "VS Code installed successfully"
    else
        warn_msg "VS Code installation may have issues"
    fi
}

# --- Install OnlyOffice ---
install_onlyoffice() {
    section_header "INSTALLING ONLYOFFICE DESKTOP EDITORS"

    if command -v onlyoffice-desktopeditors >/dev/null 2>&1 || dpkg -l | grep -q onlyoffice-desktopeditors 2>/dev/null; then
        ok_msg "OnlyOffice is already installed"
        return 0
    fi

    typewrite "Downloading OnlyOffice Desktop Editors..." "$CLR_BCYAN" 0.03
    local onlyoffice_deb="${TEMP_DIR}/onlyoffice-desktopeditors_amd64.deb"

    wget -q --show-progress -O "${onlyoffice_deb}" \
        "https://download.onlyoffice.com/install/desktop/editors/linux/onlyoffice-desktopeditors_amd64.deb" 2>/dev/null || \
    curl -fsSL -o "${onlyoffice_deb}" \
        "https://download.onlyoffice.com/install/desktop/editors/linux/onlyoffice-desktopeditors_amd64.deb" 2>/dev/null

    if [ -f "${onlyoffice_deb}" ] && [ -s "${onlyoffice_deb}" ]; then
        typewrite "Installing OnlyOffice..." "$CLR_BCYAN" 0.03
        dpkg -i "${onlyoffice_deb}" 2>/dev/null || true
        apt-get install -y -f -qq 2>/dev/null || true

        if command -v onlyoffice-desktopeditors >/dev/null 2>&1 || dpkg -l | grep -q onlyoffice-desktopeditors 2>/dev/null; then
            ok_msg "OnlyOffice installed successfully"
        else
            warn_msg "OnlyOffice installation encountered issues"
        fi
    else
        warn_msg "Failed to download OnlyOffice"
    fi

    rm -f "${onlyoffice_deb}" 2>/dev/null || true
}

# --- Install Development Tools ---
install_dev_tools() {
    section_header "INSTALLING DEVELOPMENT TOOLS"

    local dev_packages=(
        git git-lfs build-essential cmake
        python3 python3-pip python3-venv python3-dev
        python-is-python3 nodejs npm ruby ruby-dev
        golang-go default-jdk default-jre
        curl wget vim nano htop btop neofetch tree
        tmux screen zsh zip unzip p7zip-full jq bc
        net-tools dnsutils iputils-ping traceroute whois
        lsof strace tcpdump ncat socat proxychains4 tor
        openvpn network-manager network-manager-openvpn
        network-manager-openvpn-gnome openssh-server openssl
        ca-certificates apt-transport-https software-properties-common
        gnupg gnupg2 dirmngr lsb-release pkg-config
        libssl-dev libffi-dev libxml2-dev libxslt1-dev
        libjpeg-dev zlib1g-dev libpq-dev libsqlite3-dev
        libcurl4-openssl-dev libpng-dev libonig-dev
        libzip-dev libsodium-dev libgd-dev libmcrypt-dev
        readline-common
    )

    typewrite "Installing core development packages..." "$CLR_BCYAN" 0.03
    apt-get install -y -qq "${dev_packages[@]}" 2>/dev/null &
    spinner "$!" "Installing dev tools"
    wait
    ok_msg "Development tools installed"

    typewrite "Upgrading pip and installing common Python packages..." "$CLR_BCYAN" 0.03
    python3 -m pip install --upgrade pip setuptools wheel 2>/dev/null || true
    python3 -m pip install --upgrade requests beautifulsoup4 lxml selenium 2>/dev/null || true
    ok_msg "Python environment ready"

    typewrite "Installing Docker..." "$CLR_BCYAN" 0.03
    if ! command -v docker >/dev/null 2>&1; then
        curl -fsSL https://get.docker.com | bash 2>/dev/null || true
        systemctl enable docker 2>/dev/null || true
        systemctl start docker 2>/dev/null || true
        usermod -aG docker kali 2>/dev/null || true
        usermod -aG docker root 2>/dev/null || true
        ok_msg "Docker installed"
    else
        ok_msg "Docker already installed"
    fi

    typewrite "Installing Docker Compose..." "$CLR_BCYAN" 0.03
    if ! command -v docker-compose >/dev/null 2>&1; then
        apt-get install -y -qq docker-compose 2>/dev/null || true
    fi
    ok_msg "Docker Compose ready"
}

# --- Install Media & Utilities ---
install_media_tools() {
    section_header "INSTALLING MEDIA & UTILITY APPLICATIONS"

    local media_packages=(
        vlc ffmpeg gimp chromium firefox-esr
        filezilla thunderbird libreoffice gparted
        bleachbit gnome-disk-utility gdebi synaptic
        flatpak snapd
    )

    typewrite "Installing media and utility applications..." "$CLR_BCYAN" 0.03
    apt-get install -y -qq "${media_packages[@]}" 2>/dev/null &
    spinner "$!" "Installing media tools"
    wait
    ok_msg "Media and utility applications installed"
}

# --- Install Ethical Hacking Tools ---
install_hacking_tools() {
    section_header "INSTALLING ETHICAL HACKING TOOLS"

    typewrite "Installing Kali Linux core metapackages..." "$CLR_BCYAN" 0.03

    # Core Kali metapackages (install sequentially to avoid overload)
    local kali_meta_packages=(
        kali-linux-headless
        kali-linux-default
        kali-linux-large
    )

    for pkg in "${kali_meta_packages[@]}"; do
        info_msg "Installing ${pkg}..."
        apt-get install -y -qq "$pkg" 2>/dev/null &
        spinner "$!" "Installing ${pkg}"
        wait || warn_msg "Some packages in ${pkg} may have been skipped"
    done

    typewrite "Installing individual penetration testing tools..." "$CLR_BCYAN" 0.03

    # Install tools in ONE batch - not in a loop with progress bar
    # The progress bar loop was causing the visual bug you saw
    local hack_tools=(
        nmap masscan zenmap wireshark tshark
        metasploit-framework burpsuite sqlmap nikto
        dirb gobuster dirbuster wfuzz hydra john
        hashcat aircrack-ng reaver wifite pixiewps
        kismet ettercap-text-only ettercap-graphical
        bettercap responder impacket-scripts
        python3-impacket powersploit exploitdb
        searchsploit commix weevely netcat-traditional
        netcat-openbsd nishang seclists wordlists
        crunch cewl hash-identifier smbmap
        enum4linux enum4linux-ng ldap-utils
        onesixtyone snmpwalk snmp-check sslyze
        testssl.sh sslscan whatweb wafw00f
        theharvester maltego recon-ng spiderfoot
        osrframework dnsrecon fierce sublist3r
        amass assetfinder httprobe waybackurls
        gau unfurl anew hakrawler gospider meg
        ffuf feroxbuster rustscan naabu nuclei
        katana dalfox ghauri xsstrike lfi-suite
        rfi-lab phpggc ysoserial pwnkit polkit
        pkexec linux-exploit-suggester
        linux-smart-enumeration linpeas winpeas
        peass-ng bloodhound.py bloodhound neo4j
        ldapdomaindump lsassy pypykatz mimikatz
        powershell-empire starkiller covenant
        sliver havoc mythic caldera
        atomic-red-team red-team-scripts
        blue-team-scripts purple-team-tools
        sigma yara volatility3 volatility
        autopsy sleuthkit binwalk foremost
        scalpel testdisk photorec exiftool
        steghide outguess zsteg stegseek
        pngcheck exiv2 pdf-parser peepdf
        oletools xorsearch densityscout ssdeep
        radare2 cutter ghidra jd-gui apktool
        jadx dex2jar bytecode-viewer frida-tools
        objection mobsf androguard quark-engine
        apkstudio docker kubectl helm minikube
        terraform ansible packer vagrant
        virtualbox qemu-kvm libvirt-daemon-system
        virt-manager bridge-utils openvswitch-switch
        cloud-init awscli azure-cli gcloud-cli
    )

    # Install ALL tools in a SINGLE apt-get call (much faster, no loop issues)
    # This avoids the rapid progress bar overwriting problem
    info_msg "Installing ${#hack_tools[@]} hacking tools in optimized batch..."
    apt-get install -y -qq "${hack_tools[@]}" 2>/dev/null &
    spinner "$!" "Installing hacking tools batch"
    wait || warn_msg "Some hacking tools may have been skipped"

    ok_msg "Ethical hacking tools installation complete"

    typewrite "Updating Metasploit database..." "$CLR_BCYAN" 0.03
    msfdb init 2>/dev/null || true
    ok_msg "Metasploit database initialized"

    typewrite "Updating SearchSploit..." "$CLR_BCYAN" 0.03
    searchsploit --update 2>/dev/null || true
    ok_msg "SearchSploit updated"
}

# --- Install Kali Everything (Optional Heavy) ---
install_kali_everything() {
    section_header "INSTALLING KALI-LINUX-EVERYTHING"
    warn_msg "This will install ALL Kali tools (~15+ GB). Ensure you have space."
    typewrite "Installing kali-linux-everything..." "$CLR_BCYAN" 0.03
    apt-get install -y -qq kali-linux-everything 2>/dev/null &
    spinner "$!" "Installing kali-linux-everything"
    wait || warn_msg "Some packages may have been skipped"
    ok_msg "Kali Everything installation attempted"
}

# --- Post-Installation Setup ---
post_install_setup() {
    section_header "POST-INSTALLATION CONFIGURATION"

    typewrite "Configuring Git..." "$CLR_BCYAN" 0.03
    git config --global user.name "issu321" 2>/dev/null || true
    git config --global user.email "issu321@github.com" 2>/dev/null || true
    git config --global init.defaultBranch main 2>/dev/null || true
    ok_msg "Git configured"

    typewrite "Setting up helpful aliases..." "$CLR_BCYAN" 0.03
    if ! grep -q "alias ll=" /root/.bashrc 2>/dev/null; then
        echo 'alias ll="ls -laF --color=auto"' >> /root/.bashrc
        echo 'alias la="ls -A --color=auto"' >> /root/.bashrc
        echo 'alias l="ls -CF --color=auto"' >> /root/.bashrc
        echo 'alias ..="cd .."' >> /root/.bashrc
        echo 'alias ...="cd ../.."' >> /root/.bashrc
        echo 'alias update="apt-get update && apt-get upgrade -y"' >> /root/.bashrc
        echo 'alias install="apt-get install -y"' >> /root/.bashrc
    fi
    ok_msg "Aliases added to .bashrc"

    typewrite "Enabling essential services..." "$CLR_BCYAN" 0.03
    systemctl enable ssh 2>/dev/null || true
    systemctl enable tor 2>/dev/null || true
    systemctl enable docker 2>/dev/null || true
    ok_msg "Services enabled"

    typewrite "Final system cleanup..." "$CLR_BCYAN" 0.03
    apt-get autoremove -y -qq >/dev/null 2>&1 || true
    apt-get autoclean -qq >/dev/null 2>&1 || true
    apt-get clean >/dev/null 2>&1 || true
    rm -rf "${TEMP_DIR}"/* 2>/dev/null || true
    ok_msg "Cleanup complete"
}

# --- Generate Report ---
generate_report() {
    section_header "INSTALLATION REPORT"

    local report_file="${LOG_DIR}/report-$(date +%Y%m%d-%H%M%S).txt"
    {
        echo "=============================================="
        echo "  ISSU321 LINUX INSTALLATION TOOLS REPORT"
        echo "=============================================="
        echo "Date: $(date)"
        echo "Version: ${SCRIPT_VERSION}"
        echo "Log: ${LOG_FILE}"
        echo ""
        echo "--- SYSTEM INFO ---"
        echo "OS: $(cat /etc/os-release 2>/dev/null | grep PRETTY_NAME | cut -d= -f2 | tr -d '\"')"
        echo "Kernel: $(uname -r)"
        echo "Architecture: $(uname -m)"
        echo "Hostname: $(hostname)"
        echo ""
        echo "--- INSTALLED TOOLS CHECK ---"
        echo "VS Code: $(command -v code >/dev/null 2>&1 && echo 'YES' || echo 'NO')"
        echo "OnlyOffice: $(command -v onlyoffice-desktopeditors >/dev/null 2>&1 && echo 'YES' || echo 'NO')"
        echo "Docker: $(command -v docker >/dev/null 2>&1 && echo 'YES' || echo 'NO')"
        echo "Python3: $(command -v python3 >/dev/null 2>&1 && echo 'YES' || echo 'NO')"
        echo "pip3: $(command -v pip3 >/dev/null 2>&1 && echo 'YES' || echo 'NO')"
        echo "Git: $(command -v git >/dev/null 2>&1 && echo 'YES' || echo 'NO')"
        echo "Nmap: $(command -v nmap >/dev/null 2>&1 && echo 'YES' || echo 'NO')"
        echo "Metasploit: $(command -v msfconsole >/dev/null 2>&1 && echo 'YES' || echo 'NO')"
        echo "Wireshark: $(command -v wireshark >/dev/null 2>&1 && echo 'YES' || echo 'NO')"
        echo "Burp Suite: $(command -v burpsuite >/dev/null 2>&1 && echo 'YES' || echo 'NO')"
        echo ""
        echo "--- DISK USAGE ---"
        df -h / 2>/dev/null || true
        echo ""
        echo "--- MEMORY USAGE ---"
        free -h 2>/dev/null || true
        echo ""
        echo "=============================================="
        echo "GitHub: ${REPO_URL}"
        echo "=============================================="
    } > "${report_file}"

    ok_msg "Report saved to: ${report_file}"
    cat "${report_file}"
}

# ==============================================================================
# MAIN MENU & SWITCH CASE
# ==============================================================================

show_menu() {
    echo ""
    echo -e "${CLR_BMAGENTA}╔══════════════════════════════════════════════════════════════════════════════╗${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_BWHITE}                         SELECT INSTALLATION MODE                             ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}╠══════════════════════════════════════════════════════════════════════════════╣${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}                                                                              ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}  ${CLR_BGREEN}[1]${CLR_RESET} ${CLR_BWHITE}COMPLETE SETUP${CLR_RESET}                                                        ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}      ${CLR_CYAN}→ Install ALL tools (Dev, Hacking, Media, Office)${CLR_RESET}                    ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}      ${CLR_CYAN}→ Full system upgrade with drivers & firmware${CLR_RESET}                        ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}      ${CLR_CYAN}→ Recommended for newly installed Kali Linux${CLR_RESET}                       ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}                                                                              ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}  ${CLR_BYELLOW}[2]${CLR_RESET} ${CLR_BWHITE}FULL SYSTEM UPGRADE ONLY${CLR_RESET}                                              ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}      ${CLR_CYAN}→ Upgrade ALL packages, apps, and pip modules${CLR_RESET}                        ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}      ${CLR_CYAN}→ Complete Kali Linux distribution upgrade${CLR_RESET}                         ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}      ${CLR_CYAN}→ Update drivers, firmware, and kernel${CLR_RESET}                             ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}                                                                              ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}  ${CLR_BBLUE}[3]${CLR_RESET} ${CLR_BWHITE}INSTALL DEVELOPMENT TOOLS ONLY${CLR_RESET}                                      ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}      ${CLR_CYAN}→ VS Code, Docker, Python, Node.js, Git, etc.${CLR_RESET}                      ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}                                                                              ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}  ${CLR_BMAGENTA}[4]${CLR_RESET} ${CLR_BWHITE}INSTALL HACKING TOOLS ONLY${CLR_RESET}                                          ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}      ${CLR_CYAN}→ Metasploit, Burp Suite, Nmap, Wireshark, etc.${CLR_RESET}                    ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}                                                                              ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}  ${CLR_BRED}[5]${CLR_RESET} ${CLR_BWHITE}INSTALL KALI-LINUX-EVERYTHING${CLR_RESET}                                       ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}      ${CLR_CYAN}→ ALL Kali tools (~15+ GB download)${CLR_RESET}                                ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}                                                                              ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}  ${CLR_BWHITE}[0]${CLR_RESET} ${CLR_BWHITE}EXIT${CLR_RESET}                                                                ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}║${CLR_RESET}                                                                              ${CLR_BMAGENTA}║${CLR_RESET}"
    echo -e "${CLR_BMAGENTA}╚══════════════════════════════════════════════════════════════════════════════╝${CLR_RESET}"
    echo ""
}

main() {
    show_banner

    # Pre-flight checks
    check_root
    check_os
    check_internet
    setup_directories
    backup_sources

    # Animated welcome
    echo ""
    typewrite "Welcome to ISSU321 Linux Installation Tools!" "$CLR_BGREEN" 0.04
    typewrite "Your complete Kali Linux automation companion." "$CLR_BCYAN" 0.03
    echo ""

    while true; do
        show_menu
        echo -en "${CLR_BYELLOW}➤ Enter your choice [0-5]: ${CLR_RESET}"
        read -r choice
        echo ""

        case "$choice" in
            1)
                draw_box "MODE: COMPLETE SETUP" "$CLR_BGREEN"
                typewrite "This will install ALL tools and fully upgrade your system." "$CLR_BCYAN" 0.03
                typewrite "Estimated time: 30-90 minutes depending on internet speed." "$CLR_BYELLOW" 0.03
                echo ""
                echo -en "${CLR_BRED}Continue? [y/N]: ${CLR_RESET}"
                read -r confirm
                if [[ "$confirm" =~ ^[Yy]$ ]]; then
                    update_system
                    install_vscode
                    install_onlyoffice
                    install_dev_tools
                    install_media_tools
                    install_hacking_tools
                    post_install_setup
                    generate_report
                    draw_box "COMPLETE SETUP FINISHED SUCCESSFULLY!" "$CLR_BGREEN"
                    typewrite "Please reboot your system to apply all changes." "$CLR_BGREEN" 0.04
                else
                    typewrite "Operation cancelled." "$CLR_BYELLOW" 0.03
                fi
                ;;

            2)
                draw_box "MODE: FULL SYSTEM UPGRADE" "$CLR_BYELLOW"
                typewrite "This will perform a complete system upgrade." "$CLR_BCYAN" 0.03
                typewrite "All packages, pip modules, drivers, and kernel will be updated." "$CLR_BCYAN" 0.03
                echo ""
                echo -en "${CLR_BRED}Continue? [y/N]: ${CLR_RESET}"
                read -r confirm
                if [[ "$confirm" =~ ^[Yy]$ ]]; then
                    full_system_upgrade
                    draw_box "FULL UPGRADE COMPLETE!" "$CLR_BGREEN"
                    typewrite "Please reboot your system to apply all changes." "$CLR_BGREEN" 0.04
                else
                    typewrite "Operation cancelled." "$CLR_BYELLOW" 0.03
                fi
                ;;

            3)
                draw_box "MODE: DEVELOPMENT TOOLS" "$CLR_BBLUE"
                typewrite "Installing development environment..." "$CLR_BCYAN" 0.03
                install_vscode
                install_dev_tools
                post_install_setup
                draw_box "DEVELOPMENT TOOLS INSTALLED!" "$CLR_BGREEN"
                ;;

            4)
                draw_box "MODE: HACKING TOOLS" "$CLR_BMAGENTA"
                typewrite "Installing ethical hacking tools..." "$CLR_BCYAN" 0.03
                install_hacking_tools
                post_install_setup
                draw_box "HACKING TOOLS INSTALLED!" "$CLR_BGREEN"
                ;;

            5)
                draw_box "MODE: KALI EVERYTHING" "$CLR_BRED"
                typewrite "WARNING: This requires ~15+ GB of disk space!" "$CLR_BRED" 0.05
                echo -en "${CLR_BRED}Are you sure? [yes/N]: ${CLR_RESET}"
                read -r confirm
                if [ "$confirm" = "yes" ]; then
                    install_kali_everything
                    draw_box "KALI EVERYTHING INSTALLED!" "$CLR_BGREEN"
                else
                    typewrite "Operation cancelled." "$CLR_BYELLOW" 0.03
                fi
                ;;

            0)
                typewrite "Thank you for using ISSU321 Linux Installation Tools!" "$CLR_BGREEN" 0.04
                typewrite "GitHub: ${REPO_URL}" "$CLR_BCYAN" 0.03
                echo ""
                echo -e "${CLR_BMAGENTA}Goodbye!${CLR_RESET}"
                exit 0
                ;;

            *)
                fail_msg "Invalid option. Please select 0-5."
                ;;
        esac

        echo ""
        echo -e "${CLR_BMAGENTA}══════════════════════════════════════════════════════════════════════════════${CLR_RESET}"
        echo -en "${CLR_BYELLOW}Press Enter to return to menu...${CLR_RESET}"
        read -r
        clear
        show_banner
    done
}

# ==============================================================================
# TRAP HANDLERS
# ==============================================================================
trap 'echo -e "\n${CLR_BRED}[!] Script interrupted by user${CLR_RESET}"; exit 130' INT TERM
trap 'echo -e "${CLR_BRED}[!] An error occurred. Check logs at ${LOG_FILE}${CLR_RESET}"' ERR

# ==============================================================================
# SCRIPT ENTRY POINT
# ==============================================================================
main "$@"
