#!/usr/bin/env bash
# Curl-safe Vow + vpm installer entry (pipe to sh).
# Hosted at https://install.vowlang.dev — downloads release tarball or falls back to git-less layout.
set -euo pipefail

PREFIX="${PREFIX:-${HOME}/.local}"
VERSION="${VOW_VERSION:-latest}"
INSTALL_URL="${VOW_INSTALL_URL:-https://install.vowlang.dev}"
OS="$(uname -s | tr '[:upper:]' '[:lower:]')"
ARCH="$(uname -m)"
case "$ARCH" in
  x86_64) ARCH="amd64" ;;
  arm64|aarch64) ARCH="arm64" ;;
esac

need() {
  command -v "$1" >/dev/null 2>&1 || { echo "error: missing $1" >&2; exit 1; }
}

need curl
need tar
need python3

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

TARBALL="$TMP/vow.tar.gz"
if [[ "$VERSION" == "latest" ]]; then
  URL="${INSTALL_URL}/vow-${OS}-${ARCH}.tar.gz"
else
  URL="${INSTALL_URL}/vow-${VERSION}-${OS}-${ARCH}.tar.gz"
fi

echo "==> Downloading Vow release"
if ! curl -fsSL "$URL" -o "$TARBALL" 2>/dev/null; then
  echo "error: could not download $URL" >&2
  echo "For local dev, run ./installers/install.sh from a git clone instead." >&2
  exit 1
fi

tar -xzf "$TARBALL" -C "$TMP"
export VOW_SRC="$TMP/lang"
export VPM_SRC="$TMP/vpm"
export PREFIX

# Reuse monorepo installer logic (works without git checkout).
SCRIPT="$TMP/lang/../installers/install.sh"
if [[ ! -f "$SCRIPT" ]]; then
  # Tarball layout: run embedded minimal install if install.sh not bundled.
  BINDIR="$PREFIX/bin"
  VOW_HOME="$PREFIX/share/vow"
  VPM_HOME="$PREFIX/share/vpm"
  mkdir -p "$VOW_HOME" "$VPM_HOME" "$BINDIR"
  rsync -a "$TMP/lang/" "$VOW_HOME/"
  rsync -a "$TMP/vpm/" "$VPM_HOME/"
  chmod +x "$VOW_HOME/vow" "$VPM_HOME/vpm"
  python3 -m venv "$VOW_HOME/.venv"
  "$VOW_HOME/.venv/bin/pip" install -q -r "$VOW_HOME/requirements.txt" 2>/dev/null || \
    "$VOW_HOME/.venv/bin/pip" install -q llvmlite
  cat >"$BINDIR/vow" <<EOF
#!/usr/bin/env bash
exec "$VOW_HOME/.venv/bin/python" "$VOW_HOME/vow" "\$@"
EOF
  cat >"$BINDIR/vpm" <<EOF
#!/usr/bin/env bash
exec "$VOW_HOME/.venv/bin/python" "$VPM_HOME/vpm" "\$@"
EOF
  chmod +x "$BINDIR/vow" "$BINDIR/vpm"
else
  bash "$SCRIPT"
fi

echo "==> Smoke check"
export PATH="$PREFIX/bin:$PATH"
vow --version
vpm --version

case ":${PATH}:" in
  *":${PREFIX}/bin:"*) ;;
  *)
    echo ""
    echo "Add to PATH:  export PATH=\"${PREFIX}/bin:\$PATH\""
    ;;
esac

echo ""
echo "Vow + vpm installed."
echo "  vow new my-app"
echo "  cd my-app && vow run src/main.vow"
