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

enter_default_cmd() {
  declare desc="enters running app container of specified proc type"
  local cmd="enter"
  local APP="$2"; local CONTAINER_TYPE="$3"; local IMAGE_TAG=$(get_running_image_tag "$APP"); local IMAGE=$(get_app_image_name "$APP" "$IMAGE_TAG")
  verify_app_name "$APP"

  [[ ! -n "$3" ]] && dokku_log_fail "No container id specified"

  if [[ "$3" == "--container-id" ]]; then
    [[ ! -n "$4" ]] && dokku_log_fail "No container id specified"

    local DOKKU_APP_CIDS=( $(get_app_container_ids "$APP") )
    printf -- '%s\n' "${DOKKU_APP_CIDS[@]}" | grep -q -e "^$4" || dokku_log_fail "Invalid container id for app"
    local ID=$(printf -- '%s\n' "${DOKKU_APP_CIDS[@]}" | grep -e "^$4")
    shift 4
  else
    local DOKKU_APP_CIDS=( $(get_app_container_ids "$APP" "$CONTAINER_TYPE") )
    local ID=${DOKKU_APP_CIDS[0]}
    [[ ! -n $ID ]] && dokku_log_fail "No containers found for type '$CONTAINER_TYPE'"
    shift 3
  fi

  docker ps -aq --no-trunc | grep -e "^$ID" > /dev/null || dokku_log_fail "Container does not exist"
  docker ps -q --no-trunc | grep -e "^$ID" > /dev/null || dokku_log_fail "Container is not running"

  local EXEC_CMD=""
  has_tty && local DOKKU_RUN_OPTS+=" -i -t"
  is_image_herokuish_based "$IMAGE" && local EXEC_CMD="/exec"
  # shellcheck disable=SC2086
  docker exec $DOKKU_RUN_OPTS $ID $EXEC_CMD "${@:-/bin/bash}"
}

enter_default_cmd "$@"
