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

IMAGE_NAME="${PTY_AGENT_IMAGE:-pty-agent-arch:latest}"
CRATE_VERSION="${PTY_AGENT_VERSION:-}"
INSTALL_SOURCE="${PTY_AGENT_INSTALL_SOURCE:-crates}"
PROJECT_ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)"
DOCKERFILE="$PROJECT_ROOT/docker/arch.Dockerfile"

if ! command -v docker >/dev/null 2>&1; then
  echo "docker is required but was not found on PATH" >&2
  exit 1
fi

if [ "${1:-}" = "--local" ]; then
  INSTALL_SOURCE="local"
  shift
fi

if [ "$INSTALL_SOURCE" = "local" ]; then
  docker build \
    --build-arg PTY_AGENT_INSTALL_SOURCE=local \
    -t "$IMAGE_NAME" \
    -f "$DOCKERFILE" \
    "$PROJECT_ROOT"

  docker run --rm -it \
    -e OPENAI_API_KEY="${OPENAI_API_KEY:-}" \
    -e OPENAI_BASE_URL="${OPENAI_BASE_URL:-}" \
    -e PTY_AGENT_MODEL="${PTY_AGENT_MODEL:-}" \
    -e SHELL=/bin/bash \
    -v "$PROJECT_ROOT":/src/pty-agent \
    -v "$PWD":/workspace \
    -w /workspace \
    "$IMAGE_NAME" \
    bash -lc 'cargo install --path /src/pty-agent --force >/tmp/pty-agent-install.log && exec pty-agent "$@"' \
    bash "$@"
else
  docker build \
    --build-arg PTY_AGENT_INSTALL_SOURCE=crates \
    --build-arg PTY_AGENT_VERSION="$CRATE_VERSION" \
    -t "$IMAGE_NAME" \
    -f "$DOCKERFILE" \
    "$PROJECT_ROOT"

  docker run --rm -it \
    -e OPENAI_API_KEY="${OPENAI_API_KEY:-}" \
    -e OPENAI_BASE_URL="${OPENAI_BASE_URL:-}" \
    -e PTY_AGENT_MODEL="${PTY_AGENT_MODEL:-}" \
    -e SHELL=/bin/bash \
    -v "$PWD":/workspace \
    -w /workspace \
    "$IMAGE_NAME" \
    pty-agent "$@"
fi
