#!/usr/bin/env bash
set -euo pipefail

DOCKER_CONFIG=${DOCKER_CONFIG:-/usr/local/lib/docker/cli-plugins}
COMPOSE_BIN="${DOCKER_CONFIG}/docker-compose"

get_latest_compose_version() {
    curl -fsSL https://api.github.com/repos/docker/compose/releases/latest \
    | grep '"tag_name":' \
    | sed -E 's/.*"([^"]+)".*/\1/'
}

ARCH=$(uname -m)

case "$ARCH" in
    x86_64) ARCH="x86_64" ;;
    aarch64|arm64) ARCH="aarch64" ;;
    *) echo "Unsupported architecture: $ARCH"; exit 1 ;;
esac

COMPOSE_VERSION=$(get_latest_compose_version)

echo "Latest compose version: $COMPOSE_VERSION"

install_compose_plugin() {

    echo "Installing Docker Compose plugin..."

    sudo mkdir -p "$DOCKER_CONFIG"

    sudo curl -SL \
    "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-linux-${ARCH}" \
    -o "$COMPOSE_BIN"

    sudo chmod +x "$COMPOSE_BIN"

    docker compose version
}

install_docker_apt() {

    sudo apt-get update
    sudo apt-get install -y ca-certificates curl gnupg

    sudo install -m 0755 -d /etc/apt/keyrings

    curl -fsSL https://download.docker.com/linux/$1/gpg \
      | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

    sudo chmod a+r /etc/apt/keyrings/docker.gpg

    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
      https://download.docker.com/linux/$1 \
      $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
      | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

    sudo apt-get update

    sudo apt-get install -y \
        docker-ce \
        docker-ce-cli \
        containerd.io \
        docker-buildx-plugin \
        docker-compose-plugin

}

install_docker_yum() {

    sudo yum install -y yum-utils

    sudo yum-config-manager \
        --add-repo https://download.docker.com/linux/centos/docker-ce.repo

    sudo yum install -y \
        docker-ce \
        docker-ce-cli \
        containerd.io \
        docker-buildx-plugin \
        docker-compose-plugin

}

detect_os() {

    . /etc/os-release

    case "$ID" in
        ubuntu|debian)
            install_docker_apt "$ID"
            ;;
        centos|rhel|rocky|almalinux)
            install_docker_yum
            ;;
        fedora)
            sudo dnf install -y dnf-plugins-core
            sudo dnf config-manager \
                --add-repo https://download.docker.com/linux/fedora/docker-ce.repo

            sudo dnf install -y \
                docker-ce \
                docker-ce-cli \
                containerd.io \
                docker-buildx-plugin \
                docker-compose-plugin
            ;;
        *)
            echo "Unsupported OS: $ID"
            exit 1
            ;;
    esac

}

echo "Installing Docker..."

detect_os

sudo systemctl enable --now docker

sudo usermod -aG docker "$USER"

docker --version

install_compose_plugin

echo
echo "Installation completed"
echo "docker compose version"
