#!/usr/bin/env bash
# Evomedia.net Token Savers — https://github.com/kellymichels/zscripts-token-savers
# Created by Kelly Michels · dev@evomedia.net
# Licensed under the MIT License. See LICENSE.
#
# zstart_docker — bring up a local docker compose stack from <scriptsRoot>/docker/.
#
# Usage:
#   zstart_docker [--build] [--attached] [--solo]
#
#   --build      rebuild images before starting
#   --attached   stream logs in the foreground (default is detached)
#   --solo       use docker-compose.solo.yml (app only, no proxy)

set -uo pipefail
_HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$_HERE/zhelpers.sh"
z_track_start "$@"
z_require docker

build=0; attached=0; solo=0
while [ $# -gt 0 ]; do
  case "$1" in
    --build)    build=1; shift ;;
    --attached) attached=1; shift ;;
    --solo)     solo=1; shift ;;
    *)          err "Unknown option: $1"; exit 1 ;;
  esac
done

info "=== zstart_docker ==="

compose_file="docker-compose.yml"
[ "$solo" -eq 1 ] && compose_file="docker-compose.solo.yml"

if ! docker info >/dev/null 2>&1; then
  printf '\n'
  err "ERROR: Docker Engine is not running or this shell cannot reach it."
  printf '\n'
  info "Try:"
  dim "  1. Start the Docker daemon (systemctl start docker / open Docker Desktop)."
  dim "  2. Check your user is in the docker group: groups | grep docker"
  printf '\n'
  exit 1
fi

compose_path="$_HERE/docker/$compose_file"
if [ ! -f "$compose_path" ]; then
  err "ERROR: Missing $compose_path"
  exit 1
fi

[ -f "$_HERE/.env" ] || warn "WARNING: .env not found at $_HERE/.env - compose may still start if env vars are set elsewhere."

dc_args=(compose -f "$compose_file" up)
[ "$attached" -eq 0 ] && dc_args+=(-d)
[ "$build" -eq 1 ] && dc_args+=(--build)

dim "Running: docker ${dc_args[*]}"
(cd "$_HERE/docker" && docker "${dc_args[@]}") || exit $?

printf '\n'; ok "Stack: http://localhost/"
if [ "$attached" -eq 0 ]; then
  dim 'Logs:  docker compose -f docker/docker-compose.yml logs -f'
  dim 'Stop:  docker compose -f docker/docker-compose.yml down'
fi
