#!/usr/bin/env bash
# ==============================================================================
# Zamfoo Universal Installer for cPanel / WHM
# Supported: AlmaLinux 8/9, Rocky Linux 8/9, CloudLinux 8/9, CentOS/RHEL 7/8/9
# Architecture: x86_64
# ==============================================================================

set -o pipefail

# Text formatting
BOLD="\033[1m"
GREEN="\033[0;32m"
YELLOW="\033[1;33m"
RED="\033[0;31m"
CYAN="\033[0;36m"
NC="\033[0m"

echo -e "${CYAN}${BOLD}"
echo "=================================================================="
echo "                Zamfoo Universal Installer                       "
echo "=================================================================="
echo -e "${NC}"

# 1. Root permission check
if [ "$(id -u)" -ne 0 ]; then
    echo -e "${RED}[ERROR] This installer must be run as root.${NC}" >&2
    exit 1
fi

# 2. cPanel / WHM environment check
if [ ! -d /usr/local/cpanel ]; then
    echo -e "${RED}[ERROR] cPanel/WHM was not detected on this server (/usr/local/cpanel missing).${NC}" >&2
    echo -e "${YELLOW}Zamfoo is a WHM plugin and requires a valid cPanel server environment.${NC}" >&2
    exit 1
fi

# 3. Architecture check
ARCH=$(uname -m)
if [ "$ARCH" != "x86_64" ]; then
    echo -e "${RED}[ERROR] Unsupported system architecture: $ARCH${NC}" >&2
    echo -e "${YELLOW}Zamfoo requires a 64-bit x86_64 Linux operating system.${NC}" >&2
    exit 1
fi

# 4. Determine package URL (allows optional version argument: e.g. install.sh 15.1.3)
INSTALL_VERSION="$1"
LICENSE_ARG=""

if [[ "$INSTALL_VERSION" =~ ^[0-9]+\.[0-9]+ ]]; then
    DOWNLOAD_URL="https://www.zamfoo.com/downloads/Zamfoo-${INSTALL_VERSION}.x86_64.rpm"
    LICENSE_ARG="$2"
else
    DOWNLOAD_URL="https://www.zamfoo.com/downloads/Zamfoo-latest.x86_64.rpm"
    LICENSE_ARG="$1"
fi

# 5. Ensure required OS dependencies are installed
echo -e "${YELLOW}--> Resolving system dependencies...${NC}"
if command -v dnf >/dev/null 2>&1; then
    dnf install -y perl-Digest-SHA perl-HTML-Parser >/dev/null 2>&1 || true
elif command -v yum >/dev/null 2>&1; then
    yum install -y perl-Digest-SHA perl-HTML-Parser >/dev/null 2>&1 || true
fi

# 6. Download Zamfoo RPM
TMP_RPM=$(mktemp /tmp/zamfoo-installer.XXXXXX.rpm)
trap 'rm -f "$TMP_RPM"' EXIT

echo -e "${YELLOW}--> Downloading Zamfoo package: ${CYAN}${DOWNLOAD_URL}${NC} ..."
if command -v curl >/dev/null 2>&1; then
    if ! curl -sSL --fail "$DOWNLOAD_URL" -o "$TMP_RPM"; then
        echo -e "${RED}[ERROR] Failed to download Zamfoo RPM from $DOWNLOAD_URL${NC}" >&2
        exit 1
    fi
elif command -v wget >/dev/null 2>&1; then
    if ! wget -q "$DOWNLOAD_URL" -O "$TMP_RPM"; then
        echo -e "${RED}[ERROR] Failed to download Zamfoo RPM from $DOWNLOAD_URL${NC}" >&2
        exit 1
    fi
else
    echo -e "${RED}[ERROR] Neither curl nor wget was found on this system.${NC}" >&2
    exit 1
fi

# 7. Install / Upgrade Zamfoo RPM
echo -e "${YELLOW}--> Installing / Upgrading Zamfoo RPM package...${NC}"
if ! rpm -Uvh --force "$TMP_RPM"; then
    echo -e "${RED}[ERROR] RPM installation failed.${NC}" >&2
    exit 1
fi

# 8. Ensure WHM AppConfig is registered
if [ -x /usr/local/cpanel/bin/register_appconfig ] && [ -f /home/root/.zamfoo/zamfoo.conf ]; then
    /usr/local/cpanel/bin/register_appconfig /home/root/.zamfoo/zamfoo.conf >/dev/null 2>&1 || true
fi

# 9. Apply license key if provided or prompt interactively
LICENSE_FILE="/usr/local/cpanel/whostmgr/docroot/cgi/zamfoo/zamfoo_reseller_license_key.php"
if [ -n "$LICENSE_ARG" ] && [ -f "$LICENSE_FILE" ]; then
    perl -i -pe 's/(\$license=")[^"]*"/$1'"$LICENSE_ARG"'"/' "$LICENSE_FILE"
    echo -e "${GREEN}--> License key configured successfully.${NC}"
elif [ -z "$LICENSE_ARG" ] && [ -f "$LICENSE_FILE" ] && [ -r /dev/tty ] && [ -t 1 ]; then
    echo ""
    printf "${CYAN}Please enter your Zamfoo license key (press Enter to skip): ${NC}"
    read -r USER_KEY </dev/tty || true
    USER_KEY=$(echo "$USER_KEY" | tr -d '[:space:]')
    if [ -n "$USER_KEY" ]; then
        perl -i -pe 's/(\$license=")[^"]*"/$1'"$USER_KEY"'"/' "$LICENSE_FILE"
        echo -e "${GREEN}--> License key saved successfully.${NC}"
        LICENSE_ARG="$USER_KEY"
    fi
fi

echo ""
echo -e "${GREEN}${BOLD}=================================================================="
echo -e "         Zamfoo was installed / updated successfully!             "
echo -e "==================================================================${NC}"
echo ""
echo -e "${BOLD}Next Steps:${NC}"
echo -e "  1. Log into ${CYAN}WHM${NC} as root."
echo -e "  2. In the left navigation, search for ${CYAN}Zamfoo${NC} (under Plugins)."
if [ -z "$LICENSE_ARG" ]; then
    echo -e "  3. Enter your license key in WHM or save it directly to:"
    echo -e "     ${YELLOW}${LICENSE_FILE}${NC}"
fi
echo ""
echo -e "${GREEN}Thank you for using Zamfoo!${NC}"
