#!/usr/bin/env bash
##makedesc: Docker + ppa

# https://docs.docker.com/engine/install/ubuntu/
# https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user

set -eo pipefail

doRemove() {
    sudo apt purge -y docker* podman-docker containerd runc
}

installRepo() {
    sudo apt install -y ca-certificates lsb-release
    source /etc/os-release
    key="/etc/apt/keyrings/docker.asc"
    arch=$(dpkg --print-architecture)
    sudo install -m 0755 -d /etc/apt/keyrings
    curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" -o "$key"
    sudo chmod a+r $key
    echo "deb [arch=$arch signed-by=$key] https://download.docker.com/linux/ubuntu $VERSION_CODENAME stable" \
        | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt update
}

install() {
    echo
    echo "==============================================="
    echo "Installing Docker"
    echo "==============================================="
    echo
    # doRemove
    installRepo
    sudo apt install -y \
        docker-ce \
        docker-ce-cli \
        containerd.io \
        docker-buildx-plugin \
        docker-compose-plugin
    sudo usermod -aG docker "$(whoami)"
    newgrp docker
    echo
    echo "Finish! $(docker --version)"
    echo "Probably, you need to relogin to apply 'docker' group permanently."
    echo
}

upgrade() {
    echo
    echo "==============================================="
    echo "Upgrading Docker"
    echo "==============================================="
    echo
    sudo apt upgrade -y \
        docker-ce \
        docker-ce-cli \
        containerd.io \
        docker-buildx-plugin \
        docker-compose-plugin \
        docker-model-plugin
    echo
    echo "Finish!"
    echo
}

remove() {
    echo
    echo "==============================================="
    echo "Removing Docker"
    echo "==============================================="
    echo
    doRemove
    echo
    echo "Finish!"
    echo
}

case "$1" in
    u|upgrade|update) upgrade ;;
    r|remove|d|delete|p|purge) remove ;;
    install-repo) installRepo ;;
    # remove-repo) removeRepo ;; #TODO
    *) install ;;
esac
