#!/usr/bin/env bash
# RIRD Desktop Agent - Linux Installer
# Usage: bash install-desktop-linux.sh
# Or:    curl -fsSL https://rird.ai/install-desktop-linux.sh | bash

set -e

BOLD='\033[1m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
DIM='\033[2m'
RESET='\033[0m'

VERSION="3.1.2"
INSTALL_DIR="$HOME/.rird-agent"
BIN_DIR="$HOME/.local/bin"
DESKTOP_DIR="$HOME/.local/share/applications"
DOWNLOAD_URL="https://rird.ai/downloads/rird-agent/RIRD-Agent-Linux.zip"

print_step() { echo -e "${YELLOW}[$1/5]${RESET} $2"; }
print_ok()   { echo -e "      ${GREEN}done${RESET}"; }
print_err()  { echo -e "      ${RED}error: $1${RESET}"; exit 1; }
dim()        { echo -e "      ${DIM}$1${RESET}"; }

echo ""
echo -e "${BOLD}RIRD Desktop Agent v${VERSION} - Linux Installer${RESET}"
echo -e "${DIM}rird.ai${RESET}"
echo ""

# ---- Step 1: Python + system deps ----------------------------------------
print_step 1 "Checking Python 3.10+ and system dependencies..."

PYTHON=""
if command -v python3 &>/dev/null && python3 -c "import sys; assert sys.version_info >= (3,10)" 2>/dev/null; then
    PYTHON=$(command -v python3)
    dim "found: $(python3 --version)"
else
    dim "Python 3.10+ not found - installing..."
    if command -v apt-get &>/dev/null; then
        sudo apt-get update -qq
        sudo apt-get install -y -qq python3 python3-pip python3-venv
    elif command -v dnf &>/dev/null; then
        sudo dnf install -y -q python3 python3-pip
    elif command -v pacman &>/dev/null; then
        sudo pacman -S --noconfirm --quiet python python-pip
    elif command -v zypper &>/dev/null; then
        sudo zypper install -y -q python3 python3-pip
    else
        print_err "Cannot install Python automatically. Install Python 3.10+ manually then re-run."
    fi
    PYTHON=$(command -v python3)
fi

# pywebview system dependencies (WebKit)
if command -v apt-get &>/dev/null; then
    dim "installing WebKit system libraries..."
    sudo apt-get install -y -qq \
        python3-gi python3-gi-cairo \
        gir1.2-gtk-3.0 \
        gir1.2-webkit2-4.1 libwebkit2gtk-4.1-dev 2>/dev/null || \
    sudo apt-get install -y -qq \
        gir1.2-webkit2-4.0 libwebkit2gtk-4.0-dev 2>/dev/null || true
elif command -v dnf &>/dev/null; then
    sudo dnf install -y -q webkit2gtk4.1-devel python3-gobject 2>/dev/null || \
    sudo dnf install -y -q webkit2gtk3-devel python3-gobject 2>/dev/null || true
elif command -v pacman &>/dev/null; then
    sudo pacman -S --noconfirm --quiet webkit2gtk python-gobject 2>/dev/null || true
fi

print_ok

# ---- Step 2: Download & extract ------------------------------------------
print_step 2 "Downloading..."

TMP=$(mktemp -d)
trap 'rm -rf "$TMP"' EXIT

curl -fsSL --progress-bar "$DOWNLOAD_URL" -o "$TMP/rird.zip"
unzip -q "$TMP/rird.zip" -d "$TMP/extracted"

EXTRACTED_CORE=$(find "$TMP/extracted" -name "core" -type d | head -1)
[ -z "$EXTRACTED_CORE" ] && print_err "core/ not found in archive."

mkdir -p "$INSTALL_DIR"
rsync -a --delete "$EXTRACTED_CORE/" "$INSTALL_DIR/core/" 2>/dev/null || \
    cp -r "$EXTRACTED_CORE/." "$INSTALL_DIR/core/"

print_ok

# ---- Step 3: Python dependencies -----------------------------------------
print_step 3 "Installing Python dependencies..."

"$PYTHON" -m pip install --quiet --upgrade pip
"$PYTHON" -m pip install --quiet --upgrade playwright "pywebview>=4.0"
print_ok

# ---- Step 4: Chromium browser --------------------------------------------
print_step 4 "Installing Chromium (one-time download ~150MB)..."

# Playwright needs these system libs on Linux
if command -v apt-get &>/dev/null; then
    "$PYTHON" -m playwright install-deps chromium 2>/dev/null || true
fi
"$PYTHON" -m playwright install chromium 2>/dev/null
print_ok

# ---- Step 5: Launcher + desktop integration ------------------------------
print_step 5 "Creating launcher..."

# CLI launcher
mkdir -p "$BIN_DIR"
LAUNCHER="$BIN_DIR/rird"
cat > "$LAUNCHER" <<SCRIPT
#!/usr/bin/env bash
cd "$INSTALL_DIR/core"
exec "$PYTHON" main.py "\$@"
SCRIPT
chmod +x "$LAUNCHER"

# .desktop file
mkdir -p "$DESKTOP_DIR"
ICON_PATH="$INSTALL_DIR/core/favicon.png"

cat > "$DESKTOP_DIR/rird.desktop" <<DESKTOP
[Desktop Entry]
Name=RIRD
GenericName=Browser Agent
Comment=Autonomous Browser Agent by rird.ai
Exec=$LAUNCHER
Icon=$ICON_PATH
Terminal=false
Type=Application
Categories=Utility;Network;
StartupNotify=true
StartupWMClass=rird
DESKTOP

chmod +x "$DESKTOP_DIR/rird.desktop"

# Desktop shortcut
if [ -d "$HOME/Desktop" ]; then
    cp "$DESKTOP_DIR/rird.desktop" "$HOME/Desktop/RIRD.desktop"
    chmod +x "$HOME/Desktop/RIRD.desktop"
fi

# Refresh app database
command -v update-desktop-database &>/dev/null && \
    update-desktop-database "$DESKTOP_DIR" 2>/dev/null || true
command -v xdg-desktop-menu &>/dev/null && \
    xdg-desktop-menu forceupdate 2>/dev/null || true

# Ensure ~/.local/bin is in PATH
if [[ ":$PATH:" != *":$BIN_DIR:"* ]]; then
    SHELL_RC=""
    [ -f "$HOME/.bashrc" ] && SHELL_RC="$HOME/.bashrc"
    [ -f "$HOME/.zshrc" ]  && SHELL_RC="$HOME/.zshrc"
    if [ -n "$SHELL_RC" ]; then
        echo "" >> "$SHELL_RC"
        echo "export PATH=\"\$HOME/.local/bin:\$PATH\"" >> "$SHELL_RC"
        dim "added ~/.local/bin to PATH in $SHELL_RC"
    fi
fi

print_ok

echo ""
echo -e "${GREEN}${BOLD}Installation complete.${RESET}"
echo ""
echo -e "  Installed to:   ${DIM}$INSTALL_DIR${RESET}"
echo -e "  CLI command:    ${DIM}rird${RESET}"
echo -e "  App launcher:   ${DIM}look for RIRD in your application menu${RESET}"
echo ""
echo -e "  To uninstall:   ${DIM}rm -rf $INSTALL_DIR $LAUNCHER $DESKTOP_DIR/rird.desktop${RESET}"
echo ""

# Launch
"$PYTHON" "$INSTALL_DIR/core/main.py" &
disown
