DOCKER_BIN=$(test -z "${BASH_VERSION}" && which -p docker 2>/dev/null || which docker)
dood-run () {
  if test "$#" -lt 1; then
    echo "usage: [ARGS...] <DOOD_IMAGE> [ARGS...]"
    return 1
  fi
  test -z "$DOOD_QUIET" && echo '[DOOD] Running...'
  local PROJECT_DIRECTORY=${PROJECT_DIRECTORY:-$PWD}
  local PUID=$(id -u)
  local PGID=$(id -g)
  test -n "$DOCKER_HOST" -a -z "$DOCKER_SOCK" && local DOCKER_SOCK=${DOCKER_HOST//unix:\/\//}
  test -z "${NO_TTY}" && local TTY_FLAG='-t' || local TTY_FLAG=''
  test -z "${NO_EXEC}" && local DO='' || local DO='echo'
  $DO $DOCKER_BIN run --rm -i ${TTY_FLAG} --tmpfs /tmp:exec,rw -v "${DOCKER_SOCK:-/var/run/docker.sock}:/var/run/docker.sock" -v "$PROJECT_DIRECTORY:${PATH_PREFIX:-}$PROJECT_DIRECTORY" -w "${PATH_PREFIX:-}$PROJECT_DIRECTORY" -e PUID=$PUID -e PGID=$PGID -e DOCKER_SOCK="${DOCKER_SOCK}" -e "PWD=${PROJECT_DIRECTORY}" -e "HOSTNAME=${HOSTNAME}" --hostname "${HOSTNAME}" "$@"
}

DOCKER_RUN_ARGS="-v docker-context:/root/.docker"

dood_docker-compose () {
  local DOCKER_COMPOSE_ARGS=$(env | grep -E '^COMPOSE_' | while read e
  do
    echo -n " -e "
    printf " %q" "${e}"
  done)
  dood-run $DOCKER_COMPOSE_ARGS $DOCKER_RUN_ARGS apiv1/docker-compose "$@"
}
dood_compose () {
  dood_docker-compose "$@"
}
dood_compose () {
  dood_docker-compose "$@"
}

dood_docker-buildx () {
  dood-run $DOCKER_RUN_ARGS apiv1/docker-buildx "$@"
}
dood_buildx() {
  dood_docker-buildx "$@"
}

dood_docker() {
  local COMMAND=$1
  shift 1
  if type "dood_docker-$COMMAND" >/dev/null 2>&1; then
    "dood_docker-$COMMAND" "$@"
  elif type "docker-$COMMAND" >/dev/null 2>&1; then
    "docker-$COMMAND" "$@"
  else
    dood-run $DOCKER_RUN_ARGS apiv1/docker $COMMAND "$@"
  fi
}

dood_enable() {
  alias docker-compose=dood_docker-compose
  alias docker-buildx=dood_docker-buildx
  alias docker=dood_docker
}

dood_disable() {
  unalias docker-compose
  unalias docker-buildx
  unalias docker
}

dood() {
  if test "$#" -lt 1; then
    echo "usage: <docker command in dood>"
    return 1
  fi
  local COMMAND=$1
  shift 1
  if type "dood_$COMMAND" >/dev/null 2>&1; then
    "dood_$COMMAND" "$@"
  else
    dood_docker $COMMAND "$@"
  fi
}
