#!/usr/bin/env bash
#
# install-docker.sh — установка Docker CE со всеми компонентами + lazydocker
# Для Ubuntu/Debian (использует официальный репозиторий Docker).
#
# Ставит: docker-ce, docker-ce-cli, containerd.io,
#         docker-buildx-plugin, docker-compose-plugin, lazydocker
#
set -euo pipefail

# --- Проверка прав ---------------------------------------------------------
if [[ $EUID -ne 0 ]]; then
  echo "Запусти скрипт от root или через sudo: sudo bash $0" >&2
  exit 1
fi

echo "==> Обновление списка пакетов и установка зависимостей"
apt-get update
apt-get install -y \
  curl \
  wget \
  gnupg \
  ca-certificates \
  lsb-release \
  apt-transport-https

# --- GPG-ключ Docker -------------------------------------------------------
echo "==> Добавление GPG-ключа Docker"
install -m 0755 -d /etc/apt/keyrings
if [[ ! -f /etc/apt/keyrings/docker.gpg ]]; then
  curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
    | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  chmod a+r /etc/apt/keyrings/docker.gpg
fi

# --- Репозиторий Docker ----------------------------------------------------
echo "==> Подключение репозитория Docker"
ARCH="$(dpkg --print-architecture)"
CODENAME="$(lsb_release -cs)"
echo \
  "deb [arch=${ARCH} signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu ${CODENAME} stable" \
  | tee /etc/apt/sources.list.d/docker.list > /dev/null

# --- Установка Docker и компонентов ---------------------------------------
echo "==> Установка Docker Engine и плагинов"
apt-get update
apt-get install -y \
  docker-ce \
  docker-ce-cli \
  containerd.io \
  docker-buildx-plugin \
  docker-compose-plugin

# --- Автозапуск ------------------------------------------------------------
echo "==> Включение и запуск службы Docker"
systemctl enable --now docker

# --- Добавление текущего пользователя в группу docker ---------------------
# (чтобы запускать docker без sudo; при вызове через sudo берём исходного юзера)
REAL_USER="${SUDO_USER:-$USER}"
if [[ "${REAL_USER}" != "root" ]]; then
  echo "==> Добавление пользователя '${REAL_USER}' в группу docker"
  usermod -aG docker "${REAL_USER}"
  echo "    (перелогинься или выполни 'newgrp docker', чтобы применилось)"
fi

# --- Установка lazydocker --------------------------------------------------
echo "==> Установка lazydocker"
LAZYDOCKER_VERSION="$(curl -s https://api.github.com/repos/jesseduffield/lazydocker/releases/latest \
  | grep '"tag_name"' | cut -d'"' -f4 | sed 's/v//')"

TMP_DIR="$(mktemp -d)"
curl -Lo "${TMP_DIR}/lazydocker.tar.gz" \
  "https://github.com/jesseduffield/lazydocker/releases/latest/download/lazydocker_${LAZYDOCKER_VERSION}_Linux_x86_64.tar.gz"
tar xf "${TMP_DIR}/lazydocker.tar.gz" -C "${TMP_DIR}" lazydocker
install "${TMP_DIR}/lazydocker" /usr/local/bin/
rm -rf "${TMP_DIR}"

# --- Проверка --------------------------------------------------------------
echo
echo "==> Готово. Проверка версий:"
docker --version
docker compose version
docker buildx version
containerd --version
echo "lazydocker $(lazydocker --version 2>/dev/null | head -n1 || echo 'установлен')"

echo
echo "Проверка запуска контейнера:"
docker run --rm hello-world || echo "  (проверь права: возможно, нужно перелогиниться)"
