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

BASE_URL="${BASE_URL:-https://vpn.dom4k.pro/downloads}"
ARCHIVE_NAME="dom4k-vpn-cli.tar.gz"
BACKEND_NAME="dom4k-vpn-linux"
BASES=(
  "$BASE_URL"
  "https://nd.vpn.dom4k.pro/downloads"
  "https://tw.vpn.dom4k.pro/downloads"
)
LOCAL_DOWNLOAD_DIR="${LOCAL_DOWNLOAD_DIR:-/home/user/dom4k-vpn/server/web/downloads}"

INSTALL_DIR="/opt/dom4k-vpn-cli"
BIN_PATH="/usr/local/bin/dvpn"

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

if command -v python3 >/dev/null 2>&1; then
  PYTHON_BIN="python3"
elif command -v python >/dev/null 2>&1; then
  PYTHON_BIN="python"
else
  echo "Python 3 not found"
  exit 1
fi

echo "[1/7] Downloading Python client archive..."
download_with_fallback() {
  local filename="$1"
  local dst="$2"
  local ok=0
  for base in "${BASES[@]}"; do
    local url="${base%/}/$filename"
    if curl --connect-timeout 10 --max-time 120 -fsSL "$url" -o "$dst"; then
      ok=1
      break
    fi
  done
  if [[ "$ok" -eq 1 ]]; then
    return 0
  fi
  if [[ -f "$LOCAL_DOWNLOAD_DIR/$filename" ]]; then
    cp "$LOCAL_DOWNLOAD_DIR/$filename" "$dst"
    return 0
  fi
  echo "Failed to download $filename from remote mirrors and local fallback: $LOCAL_DOWNLOAD_DIR/$filename"
  return 1
}

download_with_fallback "$ARCHIVE_NAME" "$TMP_DIR/client.tar.gz"

echo "[2/7] Downloading backend binary..."
download_with_fallback "$BACKEND_NAME" "$TMP_DIR/dom4k-vpn"
chmod +x "$TMP_DIR/dom4k-vpn"

echo "[3/7] Extracting archive..."
tar -xzf "$TMP_DIR/client.tar.gz" -C "$TMP_DIR"
SRC_DIR="$TMP_DIR/dom4k-vpn-cli"
if [[ ! -d "$SRC_DIR" ]]; then
  echo "Archive format mismatch: dom4k-vpn-cli not found"
  exit 1
fi

echo "[4/7] Installing files to $INSTALL_DIR..."
sudo mkdir -p "$INSTALL_DIR"
sudo rsync -a --delete "$SRC_DIR/" "$INSTALL_DIR/"
sudo install -m 0755 "$TMP_DIR/dom4k-vpn" /usr/local/bin/dom4k-vpn
sudo setcap cap_net_admin,cap_net_raw+ep /usr/local/bin/dom4k-vpn || true

echo "[5/7] Creating virtual environment..."
sudo "$PYTHON_BIN" -m venv "$INSTALL_DIR/.venv"
sudo "$INSTALL_DIR/.venv/bin/pip" install --upgrade pip
sudo "$INSTALL_DIR/.venv/bin/pip" install -r "$INSTALL_DIR/requirements.txt"

echo "[6/7] Creating launcher in $BIN_PATH..."
sudo tee "$BIN_PATH" >/dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
exec /opt/dom4k-vpn-cli/.venv/bin/python /opt/dom4k-vpn-cli/app.py "$@"
EOF
sudo chmod 0755 "$BIN_PATH"
sudo rm -f /usr/local/bin/dom4k-vpn-cli || true

echo "[7/7] Done."
echo "Run: dvpn --help"
