# Show container's volumes.
# Usage: docker_volumes <CONTAINER>
function docker_volumes() {
	docker inspect -f '{{ .Mounts }}' "${@}"
}

# Check if any container exited.
function docker_health() {
	docker ps -a | grep Exited
}

# Find out container's IP address.
# Usage: docker_ip <CONTAINER>
function docker_ip() {
	docker inspect -f '\'{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'\' "${1}" | sed "s/^.//" | sed "s/.$//"
}

# Update all docker images.
function docker_update() {
	docker images --format "{{.Repository}}:{{.Tag}}" | xargs -L1 docker pull
}

# Docker compose shortcut.
function dc() {
	docker compose "${@}"
}

# Docker compose up.
# Usage: dcu [SERVICES]
function dcu() {
	docker compose up -d "${@}"
}

# Docker compose down.
# Usage: dcd [SERVICES]
function dcd() {
	docker compose down "${@}"
}

# Docker compose pull.
# Usage: dcp [SERVICES]
function dcp() {
	docker compose pull "${@}"
}

# Docker compose logs.
# Usage: dcl [SERVICES]
function dcl() {
	docker compose logs -f "${@}"
}

# Docker compose restart.
# Usage: dcr [SERVICES]
function dcr() {
	docker compose restart "${@}"
}

# Docker compose stop.
# Usage: dcs [SERVICES]
function dcs() {
	docker compose stop "${@}"
}

# Docker compose down & up specified services.
# Usage: dcdu [SERVICES]
function dcdu() {
	dcd "${@}"
	dcu "${@}"
}

# Docker compose pull & up specified services.
# Usage: dcpu [SERVICES]
function dcpu() {
	dcp "${@}"
	dcu "${@}"
}

# Docker compose up & attach to logs for specified services.
# Usage: dcul [SERVICES]
function dcul() {
	dcu "${@}" && dcl "${@}"
}

# Autocomplete with available services.
function _dc_services() {
	_autocomplete "$(docker compose config --services 2>/dev/null)"
}

# Autocomplete with available container names.
function _dc_containers() {
	_autocomplete "$(docker ps --format '"'{{.Names}}"\"")"
}

complete -F _dc_services dcu dcd dcp dcl dcul dcdu dcr dcs dcpu
complete -F _dc_containers docker_volumes docker_ip