#!/usr/bin/env bash
# Start the JFrog Artifactory Pro 7.161.20 stack on localhost (PostgreSQL + Artifactory).
# All state persists on the host under $JFROG_HOME.
set -euo pipefail

JFROG_HOME="${JFROG_HOME:-/work/acb/jfrog}"
IMAGE="releases-docker.jfrog.io/jfrog/artifactory-pro:7.161.20"
PG_IMAGE="docker.io/library/postgres:17-alpine"
NET="jfrog-net"

source "$JFROG_HOME/.env"

podman network exists "$NET" || podman network create "$NET"

# --- PostgreSQL (required: 7.161.x dropped the bundled Derby DB) ---
if ! podman container exists jfrog-postgres; then
  podman run -d --name jfrog-postgres --privileged --network "$NET" --restart unless-stopped \
    -e POSTGRES_DB="$POSTGRES_DB" \
    -e POSTGRES_USER="$POSTGRES_USER" \
    -e POSTGRES_PASSWORD="$POSTGRES_PASSWORD" \
    -v "$JFROG_HOME/postgresql/data:/var/lib/postgresql/data:Z" \
    --shm-size=256m \
    "$PG_IMAGE"
else
  podman start jfrog-postgres >/dev/null
fi

until podman exec jfrog-postgres pg_isready -U "$POSTGRES_USER" -d "$POSTGRES_DB" >/dev/null 2>&1; do
  echo "waiting for postgres..."; sleep 2
done

# --- Artifactory ---
if ! podman container exists artifactory; then
  podman run -d --name artifactory --privileged --network "$NET" --restart unless-stopped \
    -v "$JFROG_HOME/artifactory/var:/var/opt/jfrog/artifactory:Z" \
    -p 127.0.0.1:8081:8081 \
    -p 127.0.0.1:8082:8082 \
    --ulimit nofile=32000:32000 \
    "$IMAGE"
else
  podman start artifactory >/dev/null
fi

echo "Stack started."
echo "  UI:  http://localhost:8082/ui/   (first login: admin / password)"
echo "  API: http://localhost:8081/artifactory/"
echo "Follow boot:  podman logs -f artifactory"
