#!/usr/bin/env bash
set -euo pipefail

# ── Colors ──────────────────────────────────────────────
RED='\033[0;31m'; GREEN='\033[0;32m'; CYAN='\033[0;36m'
YELLOW='\033[1;33m'; NC='\033[0m'
log()  { echo -e "${CYAN}→${NC} $1"; }
ok()   { echo -e "${GREEN}✓${NC} $1"; }
warn() { echo -e "${YELLOW}⚠${NC} $1"; }
err()  { echo -e "${RED}✗${NC} $1"; exit 1; }

# ── Detect platform ──────────────────────────────────────
OS="$(uname -s)"
ARCH="$(uname -m)"

install_alacritty_linux() {
  if command -v alacritty &>/dev/null; then
    ok "Alacritty already installed ($(alacritty --version))"
    return 0
  fi

  log "Installing Alacritty..."

  # Detect package manager
  if command -v apt-get &>/dev/null; then
    sudo apt-get update -qq && sudo apt-get install -y -qq alacritty
  elif command -v pacman &>/dev/null; then
    sudo pacman -S --noconfirm alacritty
  elif command -v dnf &>/dev/null; then
    sudo dnf install -y alacritty
  elif command -v zypper &>/dev/null; then
    sudo zypper install -y alacritty
  elif command -v guix &>/dev/null; then
    guix install alacritty
  elif command -v snap &>/dev/null; then
    sudo snap install alacritty --classic
  else
    warn "No known package manager. Trying cargo..."
    if command -v cargo &>/dev/null; then
      cargo install alacritty
    else
      err "Could not install Alacritty. Install manually: https://alacritty.org"
    fi
  fi

  if command -v alacritty &>/dev/null; then
    ok "Alacritty installed ($(alacritty --version))"
  else
    warn "Alacritty installed but not on PATH — you may need to log out/in"
  fi
}

install_alacritty_macos() {
  if command -v alacritty &>/dev/null; then
    ok "Alacritty already installed ($(alacritty --version))"
    return 0
  fi

  if ! command -v brew &>/dev/null; then
    log "Installing Homebrew first..."
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  fi

  log "Installing Alacritty via Homebrew..."
  brew install --cask alacritty
  ok "Alacritty installed"
}

# ── Create desktop launcher ──────────────────────────────────
create_launcher_linux() {
  local launcher_dir="$HOME/.local/share/applications"
  local desktop_path="$HOME/Desktop/aegis-cli.desktop"
  mkdir -p "$launcher_dir"

  # Find the aegis binary
  local aegis_bin
  aegis_bin="$(command -v aegis || command -v aegis-cli || echo "$HOME/.npm-global/bin/aegis")"

  cat > /tmp/aegis-cli.desktop << DESKTOP_EOF
[Desktop Entry]
Version=1.0
Name=ÆGIS CLI Terminal
Comment=Launch Alacritty with ÆGIS Code CLI
Exec=alacritty -e $aegis_bin
Icon=utilities-terminal
Terminal=false
Type=Application
Categories=Development;Utility;
StartupWMClass=Alacritty
DESKTOP_EOF

  cp /tmp/aegis-cli.desktop "$launcher_dir/aegis-cli.desktop"
  chmod +x "$launcher_dir/aegis-cli.desktop"

  # Also put on Desktop if it exists
  if [ -d "$HOME/Desktop" ]; then
    cp /tmp/aegis-cli.desktop "$desktop_path"
    chmod +x "$desktop_path"
    ok "Launcher placed on Desktop: $desktop_path"
  fi

  # Update desktop database so it shows in app menus
  if command -v update-desktop-database &>/dev/null; then
    update-desktop-database "$launcher_dir" 2>/dev/null || true
  fi

  ok "Desktop launcher created: ÆGIS CLI Terminal"
}

create_launcher_macos() {
  local app_dir="$HOME/Desktop/AEGIS CLI.app"
  local aegis_bin
  aegis_bin="$(command -v aegis || command -v aegis-cli || echo "/opt/homebrew/bin/aegis")"
  local alacritty_bin="/Applications/Alacritty.app/Contents/MacOS/alacritty"

  # Create macOS .app bundle on desktop
  mkdir -p "$app_dir/Contents/MacOS"
  cat > "$app_dir/Contents/Info.plist" << PLIST_EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>CFBundleExecutable</key>
  <string>aegis-launcher</string>
  <key>CFBundleName</key>
  <string>ÆGIS CLI</string>
  <key>CFBundleIdentifier</key>
  <string>org.aegiscli.launcher</string>
  <key>CFBundlePackageType</key>
  <string>APPL</string>
</dict>
</plist>
PLIST_EOF

  cat > "$app_dir/Contents/MacOS/aegis-launcher" << LAUNCHER_SH
#!/bin/bash
exec "$alacritty_bin" -e "$aegis_bin"
LAUNCHER_SH
  chmod +x "$app_dir/Contents/MacOS/aegis-launcher"
  ok "macOS app created: $app_dir"
}

# ── Main ──────────────────────────────────────────────
echo ""
echo "  ${CYAN}━━━ AEGIS CLI — Alacritty Installer ━━━${NC}"
echo ""

case "$OS" in
  Linux)
    install_alacritty_linux
    create_launcher_linux
    ;;
  Darwin)
    install_alacritty_macos
    create_launcher_macos
    ;;
  *)
    err "Unsupported OS: $OS"
    ;;
esac

echo ""
ok "Done! Double-click the desktop icon to launch Alacritty + AEGIS CLI."
echo ""
