#!/usr/bin/env bash
[[ " apps apps:create apps:rename apps:destroy help apps:help " == *" $1 "* ]] || exit $DOKKU_NOT_IMPLEMENTED_EXIT
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_AVAILABLE_PATH/apps/functions"

case "$1" in
  apps)
    dokku_log_info2_quiet "My Apps"
    find $DOKKU_ROOT -follow -maxdepth 1 -type d  \( ! -iname ".*" \)  -not -path $DOKKU_ROOT/tls | sed 's|^\./||g' | sed 's|'$DOKKU_ROOT'\/||' | tail -n +2 | sort
    ;;

  apps:create)
    apps_create $2
    ;;
  
  apps:rename)
    [[ -z $2 ]] && dokku_log_fail "Please specify an app to run the command on"
    [[ -d "$DOKKU_ROOT/$3" ]] && dokku_log_fail "Name is already taken"
    OLD_APP="$2"
    NEW_APP="$3"

    mkdir -p "$DOKKU_ROOT/$NEW_APP"
    docker run --rm -v "$DOKKU_ROOT/$OLD_APP/cache:/cache" "dokku/$OLD_APP" chmod 777 -R /cache
    rm -rf "$DOKKU_ROOT/$OLD_APP/cache"
    cp -a "$DOKKU_ROOT/$OLD_APP/." "$DOKKU_ROOT/$NEW_APP"
    dokku apps:destroy $OLD_APP --force
    sed -i -e "s/$OLD_APP/$NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/URLS"
    sed -i -e "s/$OLD_APP/$NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/VHOST"
    dokku ps:rebuild $NEW_APP
    plugn trigger post-app-rename $OLD_APP $NEW_APP
    echo "Renaming $OLD_APP to $NEW_APP... done"
    ;;
 
  apps:destroy)
    [[ -z $2 ]] && dokku_log_fail "Please specify an app to run the command on"
    [[ "$2" == "tls" ]] && dokku_log_fail "Unable to destroy tls directory"
    [[ "$3" == "force" ]] && DOKKU_APPS_FORCE_DELETE=1
    APP="$2"; 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
    DOKKU_APP_CIDS=$(get_app_container_ids $APP)
    if [[ -n $DOKKU_APP_CIDS ]]; then
      for ID in $DOKKU_APP_CIDS; do
        docker stop $ID > /dev/null || true
        docker rm $ID  > /dev/null || true
      done
    fi

    plugn trigger post-delete $APP $IMAGE_TAG
    ;;

  help | apps:help)
    cat<<EOF
    apps, List your apps
    apps:create <app>, Create a new app
    apps:destroy <app>, Permanently destroy an app
    apps:rename <old-app> <new-app>, Rename an app
EOF
    ;;

  *)
    exit $DOKKU_NOT_IMPLEMENTED_EXIT
    ;;

esac
