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

apps_create() {
  declare desc="verifies app name and creates an app"
  [[ -z $1 ]] && dokku_log_fail "Please specify an app to run the command on"
  [[ ! "$1" =~ ^[a-z].* && ! "$1" =~ ^[0-9].* ]] && dokku_log_fail "App name must begin with lowercase alphanumeric character"
  [[ -d "$DOKKU_ROOT/$1" ]] && dokku_log_fail "Name is already taken"
  local APP="$1"

  mkdir -p "$DOKKU_ROOT/$APP"
  echo "Creating $APP... done"
  plugn trigger post-create "$APP"
}

apps_destroy() {
  local APP="$1"; local IMAGE_TAG=$(get_running_image_tag "$APP")
  verify_app_name "$APP"

  if [[ -z "$DOKKU_APPS_FORCE_DELETE" ]]; then
    dokku_log_warn "WARNING: Potentially Destructive Action"
    dokku_log_warn "This command will destroy $APP (including all add-ons)."
    dokku_log_warn "To proceed, type \"$APP\""
    echo ""

    read -rp "> " app_name
    if [[ "$app_name" != "$APP" ]]; then
      dokku_log_fail "Confirmation did not match $APP. Aborted."
    fi
  fi

  echo "Destroying $APP (including all add-ons)"

  plugn trigger pre-delete "$APP" "$IMAGE_TAG"
  local DOKKU_APP_CIDS=$(get_app_container_ids "$APP")
  local DOKKU_DOCKER_STOP_TIMEOUT="$(config_get "$APP" DOKKU_DOCKER_STOP_TIMEOUT || true)"
  [[ $DOKKU_DOCKER_STOP_TIMEOUT ]] && DOCKER_STOP_TIME_ARG="--time=${DOKKU_DOCKER_STOP_TIMEOUT}"

  if [[ -n $DOKKU_APP_CIDS ]]; then
    local cid
    for cid in $DOKKU_APP_CIDS; do
      # shellcheck disable=SC2086
      docker stop $DOCKER_STOP_TIME_ARG "$cid" > /dev/null || true
      docker rm "$cid"  > /dev/null || true
    done
  fi

  plugn trigger post-delete "$APP" "$IMAGE_TAG"
}
