#!/usr/bin/env bash
# docker-test.sh — Rebuild and redeploy Pipeline locally from scratch.
# Cleans only Pipeline Docker resources before building.
#
# SAFETY: This script ONLY operates on the Pipeline compose project.
# It will NOT stop, remove, or prune containers/images/volumes from
# other projects (bill-tracker, open-webui, portainer, scanopy, etc.).
#
# IMPORTANT: Do not add global Docker cleanup here (e.g. `docker system prune`,
# `docker image prune`, `docker volume prune`). Those commands operate on
# ALL Docker resources system-wide and will destroy other running services.
#
# DATA PERSISTENCE: The postgres database lives in ./data/postgres (bind mount).
# It is NOT a Docker volume — it survives rebuilds automatically.
# DB data (gateways, keys, etc.) persists across docker-test.sh runs.
set -euo pipefail

cd "$(git rev-parse --show-toplevel)"

PROJECT_NAME="$(docker compose config --format '{{.Name}}' 2>/dev/null || echo 'pipeline')"
echo "=== Compose project: ${PROJECT_NAME} ==="
echo "=== Stopping ${PROJECT_NAME} containers (preserving database volume) ==="

# Stop and remove containers only — no --volumes (preserve postgres data),
# no --rmi all (preserve pulled base images). Just rebuild the app images.
docker compose down --remove-orphans 2>/dev/null || true

echo "=== Building and starting all containers ==="
docker compose up --build -d

echo "=== Waiting for services to be healthy ==="
sleep 5

echo "=== Checking container status ==="
docker compose ps

echo ""
echo "=== Deploy complete ==="
echo 'Frontend: http://localhost:3030'
echo 'Backend:  http://localhost:8001'