#!/bin/bash

install_docker() {
    echo "Docker not found. Installing Docker..."
    case $1 in
        ubuntu|debian)
            set -o errexit
            set -o nounset

            IFS=$(printf '\n\t')

            # Docker
            sudo apt remove --yes docker docker-engine docker.io containerd runc || true
            sudo apt update
            sudo apt --yes --no-install-recommends install apt-transport-https ca-certificates
            wget --quiet --output-document=- https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
            sudo add-apt-repository --yes "deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/ubuntu $(lsb_release --codename --short) stable"
            sudo apt update
            sudo apt --yes --no-install-recommends install docker-ce docker-ce-cli containerd.io
            sudo usermod --append --groups docker "$USER"
            sudo systemctl enable docker
            printf '\nDocker installed successfully\n\n'

            printf 'Waiting for Docker to start...\n\n'
            sleep 5

            # Docker Compose
            # --- giving error [
            #sudo wget --output-document=/usr/local/bin/docker-compose "https://github.com/docker/compose/releases/download/$(wget --quiet --output-document=- https://api.github.com/repos/docker/compose/releases/latest | grep --perl-regexp --only-matching '"tag_name": "\K.*?(?=")')/run.sh"
            # ] so replacing with [
            sudo apt --yes install curl
            sudo curl -L "https://github.com/docker/compose/releases/download/1.28.6/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose
            sudo chmod +x /usr/bin/docker-compose
            sudo cp /usr/bin/docker-compose /usr/local/bin/docker-compose

            # ]
            sudo chmod +x /usr/local/bin/docker-compose
            # --- giving error [
            sudo wget --output-document=/etc/bash_completion.d/docker-compose "https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose"
            # ]
            printf '\nDocker Compose installed successfully\n\n'
            printf '\nAdding user to docker group\n\n'

            sudo adduser $USER docker

            set +e
            out=$(docker ps 2>&1)
            printf '$out'
            if [[ $out == *"Got permission denied"* ]]
            then
              printf '\n================ Added user to the docker - logout and login again=================\n\n'
              exit 1
            else
              printf '\n================ Added user to the docker ps running with no errors =================\n\n'
            fi
            set -e #for later
            ;;
        rhel|centos)
            # Later versions need podman, need to confirm
            sudo dnf update -y

            # Install the Docker Repository
            sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

            # Install Docker Engine
            sudo dnf install docker-ce docker-ce-cli containerd.io -y
            sudo systemctl enable docker
            sudo systemctl start docker

            # Add User to Docker Group
            sudo usermod -aG docker $USER

            # docker version
            docker --version


            # Download Docker Compose
            sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose

            # Apply Execute Permissions
            sudo chmod +x /usr/bin/docker-compose

            # docker-compose version
            docker-compose --version

            sudo usermod -aG adm $USER
            ;;
        amzn)
            sudo yum update -y
            sudo amazon-linux-extras install docker -y
            sudo yum install docker

            sudo systemctl enable docker
            sudo systemctl start docker

            # Add User to Docker Group
            sudo usermod -aG docker $USER

            # docker version
            docker --version

            # Download Docker Compose
            sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose

            # Apply Execute Permissions
            sudo chmod +x /usr/bin/docker-compose

            # docker-compose version
            docker-compose --version

            sudo usermod -aG adm $USER

            ;;
        *)
            echo "Unsupported OS: $1"
            exit 1
            ;;
    esac
}

# Detect the Linux distribution
if [ -f /etc/os-release ]; then
    . /etc/os-release
    OS=$ID
else
    echo "Cannot detect OS. Exiting."
    exit 1
fi

# Install Docker if not already installed
if ! command -v docker &> /dev/null; then
    install_docker $OS
else
    # Check if Podman is also installed, its symlink to docker usually on redhat
    if command -v podman &> /dev/null; then
        echo "Podman is installed. Removing and reinstalling Docker..."
        install_docker $OS
    else
        echo "Docker is already installed."
    fi
fi