#!/usr/bin/env bash
set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"

fn-scheduler-docker-local-run-container-logs() {
  declare desc="outputs logs for a single run container"
  declare CONTAINER_NAME="$1" PRETTY_PRINT="$2" COLOR="$3"
  shift 3
  local DYNO="$(echo "$CONTAINER_NAME" | cut -d. -f3)"

  if [[ "$PRETTY_PRINT" == "true" ]]; then
    "$DOCKER_BIN" logs "$@" "$CONTAINER_NAME" 2>&1
    return
  fi

  "$DOCKER_BIN" logs -t "$@" "$CONTAINER_NAME" 2>&1 | sed -u -r "s/^([^Z]+Z )/\x1b[${COLOR}m\1app[${DYNO}]:\x1b[0m /gm"
}

trigger-scheduler-docker-local-scheduler-logs() {
  declare desc="scheduler-docker-local scheduler-logs plugin trigger"
  declare trigger="scheduler-logs"
  declare DOKKU_SCHEDULER="$1" APP="$2" CONTAINER_NAME="$3" TAIL="$4" PRETTY_PRINT="$5" NUM="$6"
  local DOCKER_LOGS_ARGS=("--tail" "$NUM")
  local COLORS=(36 33 32 35 31)
  local CONTAINERS=() NAME NAMES

  if [[ "$DOKKU_SCHEDULER" != "docker-local" ]]; then
    return
  fi

  if [[ "$TAIL" == "true" ]]; then
    DOCKER_LOGS_ARGS+=("--follow")
  fi

  NAMES="$("$DOCKER_BIN" container ls --all --filter "label=com.dokku.app-name=$APP" --filter "label=com.dokku.container-type=run" --format '{{ .Names }}')"
  while IFS= read -r NAME; do
    [[ -z "$NAME" ]] && continue
    if [[ -z "$CONTAINER_NAME" ]] || [[ "$NAME" == "$CONTAINER_NAME" ]]; then
      CONTAINERS+=("$NAME")
    fi
  done <<<"$NAMES"

  if [[ -n "$CONTAINER_NAME" ]] && [[ ${#CONTAINERS[@]} -eq 0 ]]; then
    dokku_log_fail "Specified container does not exist"
  fi

  local MAX_INDEX
  ((MAX_INDEX = ${#CONTAINERS[@]} - 1)) || true
  for i in "${!CONTAINERS[@]}"; do
    local COLOR="${COLORS[i % ${#COLORS[@]}]}"
    if [[ "$i" != "$MAX_INDEX" ]]; then
      fn-scheduler-docker-local-run-container-logs "${CONTAINERS[i]}" "$PRETTY_PRINT" "$COLOR" "${DOCKER_LOGS_ARGS[@]}" &
    else
      fn-scheduler-docker-local-run-container-logs "${CONTAINERS[i]}" "$PRETTY_PRINT" "$COLOR" "${DOCKER_LOGS_ARGS[@]}"
    fi
  done
  wait
}

trigger-scheduler-docker-local-scheduler-logs "$@"
