#!/bin/bash
set -euo pipefail

BASE_URL="${GEN_AI_BASE_URL:-https://picsart.com/gen-ai-cli/releases}"
VERSION="${GEN_AI_VERSION:-latest}"
INSTALL_DIR="${GEN_AI_INSTALL_DIR:-${HOME}/.local/bin}"

echo "Installing Picsart CLI..."

# ── 1. Detect platform ───────────────────────────────────────
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m)

case "$ARCH" in
  x86_64|amd64) ARCH="x64" ;;
  arm64|aarch64) ARCH="arm64" ;;
  *)
    echo "Error: Unsupported architecture: $ARCH"
    echo "Falling back to npm: npm install -g @picsart/gen-ai"
    exit 1
    ;;
esac

case "$OS" in
  darwin|linux) ;;
  *)
    echo "Error: Unsupported OS: $OS"
    echo "On Windows, run: iwr https://picsart.com/gen-ai-cli/install.ps1 | iex"
    exit 1
    ;;
esac

PLATFORM="${OS}-${ARCH}"

# ── 2. Resolve version ───────────────────────────────────────
if [ "$VERSION" = "latest" ]; then
  VERSION=$(curl -fsSL "${BASE_URL}/latest.txt" | tr -d '[:space:]')
  if [ -z "$VERSION" ]; then
    echo "Error: Could not resolve latest version from ${BASE_URL}/latest.txt"
    exit 1
  fi
fi

echo "Installing gen-ai v${VERSION} for ${PLATFORM}..."

# ── 3. Download binary + checksums ───────────────────────────
mkdir -p "$INSTALL_DIR"
TMP_BIN=$(mktemp)
trap 'rm -f "$TMP_BIN"' EXIT

BIN_URL="${BASE_URL}/${VERSION}/${PLATFORM}/gen-ai"
if ! curl -fsSL "$BIN_URL" -o "$TMP_BIN"; then
  echo "Error: Download failed from $BIN_URL"
  exit 1
fi

# ── 4. Verify checksum ───────────────────────────────────────
EXPECTED=$(curl -fsSL "${BASE_URL}/${VERSION}/checksums.txt" | grep "gen-ai-${PLATFORM}" | awk '{print $1}')
if [ -z "$EXPECTED" ]; then
  echo "Error: Could not find checksum for ${PLATFORM} in checksums.txt"
  exit 1
fi

if command -v sha256sum >/dev/null 2>&1; then
  ACTUAL=$(sha256sum "$TMP_BIN" | awk '{print $1}')
elif command -v shasum >/dev/null 2>&1; then
  ACTUAL=$(shasum -a 256 "$TMP_BIN" | awk '{print $1}')
else
  echo "Error: Neither sha256sum nor shasum found — cannot verify download."
  exit 1
fi

if [ "$EXPECTED" != "$ACTUAL" ]; then
  echo "Error: Checksum mismatch."
  echo "  Expected: $EXPECTED"
  echo "  Got:      $ACTUAL"
  exit 1
fi

# ── 5. Install ───────────────────────────────────────────────
mv "$TMP_BIN" "${INSTALL_DIR}/gen-ai"
chmod +x "${INSTALL_DIR}/gen-ai"
trap - EXIT

# ── 6. PATH setup ────────────────────────────────────────────
if [[ ":$PATH:" != *":${INSTALL_DIR}:"* ]]; then
  SHELL_NAME=$(basename "${SHELL:-bash}")
  case "$SHELL_NAME" in
    zsh)  RC="${HOME}/.zshrc" ;;
    bash) RC="${HOME}/.bashrc" ;;
    fish) RC="${HOME}/.config/fish/config.fish" ;;
    *)    RC="${HOME}/.profile" ;;
  esac

  if [ -f "$RC" ] && grep -qs "${INSTALL_DIR}" "$RC" 2>/dev/null; then
    :
  else
    # Parent dir may not exist on fresh systems (e.g. ~/.config/fish/ for new fish users).
    mkdir -p "$(dirname "$RC")"
    echo "" >> "$RC"
    echo "# Added by gen-ai installer" >> "$RC"
    if [ "$SHELL_NAME" = "fish" ]; then
      echo "set -gx PATH ${INSTALL_DIR} \$PATH" >> "$RC"
    else
      echo "export PATH=\"${INSTALL_DIR}:\$PATH\"" >> "$RC"
    fi
    echo "Added ${INSTALL_DIR} to PATH in $RC"
  fi
  export PATH="${INSTALL_DIR}:${PATH}"
fi

# ── 7. Verify ────────────────────────────────────────────────
echo ""
echo "Picsart CLI v${VERSION} installed to ${INSTALL_DIR}/gen-ai"
if [ "$(gen-ai --version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1 || true)" = "${VERSION}" ]; then
  echo "Run 'gen-ai' to get started."
else
  echo "Open a new terminal and run 'gen-ai' to get started."
fi
