#!/bin/bash

set -e

cd "$(dirname "$0")"

show_services() {
  echo
  echo "Available services:"
  echo
  echo "bin-it"
  echo "cloudflared"
  echo "navidrome"
  echo "nextcloud"
  echo "ntfy"
  echo "portainer"
  echo "ollama"
  echo "vaultwarden"
  echo "all"

  echo "Usage examples:"
  echo "./stop cloudflared"
  echo "./stop cloudflared portainer -v"
  echo "./stop all"
}

FILES=()
REMOVE_VOLUMES=false
DOWN_ARGS=()

for arg in "$@"; do
  case "$arg" in
  bin-it)
    FILES+=("-f" "compose.bin-it.yaml")
    ;;
  cloudflared)
    FILES+=("-f" "compose.cloudflared.yaml")
    ;;
  navidrome)
    FILES+=("-f" "compose.navidrome.yaml")
    ;;
  nextcloud)
    FILES+=("-f" "compose.nextcloud.yaml")
    ;;
  ntfy)
    FILES+=("-f" "compose.ntfy.yaml")
    ;;
  ollama)
    FILES+=("-f" "compose.ollama.yaml")
    ;;
  portainer)
    FILES+=("-f" "compose.portainer.yaml")
    ;;
  vaultwarden)
    FILES+=("-f" "compose.vaultwarden.yaml")
    ;;
  all)
    FILES+=("-f" "compose.bin-it.yaml" "-f" "compose.cloudflared.yaml" "-f" "compose.navidrome.yaml" "-f" "compose.nextcloud.yaml" "-f" "compose.ntfy.yaml" "-f" "compose.ollama.yaml" "-f" "compose.portainer.yaml" "-f" "compose.vaultwarden.yaml")
    ;;
  -v|--volumes)
    REMOVE_VOLUMES=true
    ;;
  *)
    echo "$arg is an unknown service"
    show_services
    exit 1
    ;;
  esac
done

if [ ${#FILES[@]} -eq 0 ]; then
  echo "Error: no services specified"
  show_services
  exit 1
fi

if [ "$REMOVE_VOLUMES" = true ]; then
  DOWN_ARGS+=("-v")
fi

if ! docker compose "${FILES[@]}" down "${DOWN_ARGS[@]}"; then
  echo "Error occurred while stopping services"
  exit 1
fi
