#!/usr/bin/env bash
# =============================================================================
# ITT FastLane - One-Command Docker Deploy
# =============================================================================
# Usage:
#   scripts/docker_up.sh           # Build + start everything
#   scripts/docker_up.sh clean     # Wipe volumes + rebuild + start (nuclear)
#   scripts/docker_up.sh logs      # Follow logs of all services
#   scripts/docker_up.sh stop      # Stop all services
#   scripts/docker_up.sh restart   # Restart all services
#   scripts/docker_up.sh status    # Show status of all containers
# =============================================================================

set -euo pipefail
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$HERE/.."

# Prefer `docker compose` (v2) but fall back to `docker-compose` (v1)
if docker compose version >/dev/null 2>&1; then
    DC="docker compose"
elif command -v docker-compose >/dev/null 2>&1; then
    DC="docker-compose"
else
    echo "ERROR: Neither 'docker compose' nor 'docker-compose' found. Install Docker first." >&2
    exit 1
fi

# On systems where docker requires sudo, prepend it
if ! docker ps >/dev/null 2>&1; then
    DC="sudo $DC"
fi

ACTION="${1:-up}"

case "$ACTION" in
    up|start|"")
        echo "▶ Building images and starting stack..."
        $DC up -d --build
        echo ""
        echo "✔ Stack started. API available at http://localhost:8080"
        echo "  Tail logs:  scripts/docker_up.sh logs"
        echo "  Status:     scripts/docker_up.sh status"
        ;;
    clean|wipe)
        echo "⚠ Wiping ALL volumes (Kafka data will be lost)..."
        $DC down -v
        echo "▶ Rebuilding and starting fresh..."
        $DC up -d --build
        echo "✔ Fresh stack running."
        ;;
    stop|down)
        echo "▶ Stopping stack (data preserved)..."
        $DC down
        echo "✔ Stopped."
        ;;
    restart)
        echo "▶ Restarting stack..."
        $DC restart
        echo "✔ Restarted."
        ;;
    logs)
        $DC logs -f --tail=100
        ;;
    status|ps)
        $DC ps
        ;;
    build)
        $DC build --no-cache
        ;;
    *)
        echo "Unknown action: $ACTION"
        echo "Usage: $0 {up|clean|stop|restart|logs|status|build}"
        exit 1
        ;;
esac
