#!/bin/sh -e

. ../common-script.sh

# Function to prompt the user for installation choice
choose_installation() {
  clear
  printf "%b\n" "${YELLOW}Choose what to install:${RC}"
  printf "%b\n" "1. ${YELLOW}Docker${RC}"
  printf "%b\n" "2. ${YELLOW}Docker Compose${RC}"
  printf "%b\n" "3. ${YELLOW}Both${RC}"
  printf "%b" "Enter your choice [1-3]: "
  read -r CHOICE

  case "$CHOICE" in
  1)
    INSTALL_DOCKER=1
    INSTALL_COMPOSE=0
    ;;
  2)
    INSTALL_DOCKER=0
    INSTALL_COMPOSE=1
    ;;
  3)
    INSTALL_DOCKER=1
    INSTALL_COMPOSE=1
    ;;
  *)
    printf "%b\n" "${RED}Invalid choice. Exiting.${RC}"
    exit 1
    ;;
  esac
}

install_docker() {
  printf "%b\n" "${YELLOW}Installing Docker...${RC}"
  case "$PACKAGER" in
  apt-get | nala)
    curl -fsSL https://get.docker.com | sh
    ;;
  zypper)
    "$ESCALATION_TOOL" "$PACKAGER" --non-interactive install docker
    "$ESCALATION_TOOL" systemctl enable docker
    "$ESCALATION_TOOL" systemctl start docker
    ;;
  pacman)
    "$ESCALATION_TOOL" "$PACKAGER" -S --noconfirm docker
    "$ESCALATION_TOOL" systemctl enable docker
    "$ESCALATION_TOOL" systemctl start docker
    ;;
  *)
    printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
    exit 1
    ;;
  esac
}

install_docker_compose() {
  printf "%b\n" "${YELLOW}Installing Docker Compose...${RC}"
  case "$PACKAGER" in
  apt-get | nala)
    "$ESCALATION_TOOL" "$PACKAGER" install -y docker-compose-plugin
    ;;
  zypper)
    "$ESCALATION_TOOL" "$PACKAGER" --non-interactive install docker-compose
    ;;
  pacman)
    "$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm docker-compose
    ;;
  *)
    printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
    exit 1
    ;;
  esac
}

install_components() {
  choose_installation

  if [ "$INSTALL_DOCKER" -eq 1 ]; then
    if ! command_exists docker; then
      install_docker
    else
      printf "%b\n" "${GREEN}Docker is already installed.${RC}"
    fi
  fi

  if [ "$INSTALL_COMPOSE" -eq 1 ]; then
    if ! command_exists docker-compose || ! command_exists docker compose version; then
      install_docker_compose
    else
      printf "%b\n" "${GREEN}Docker Compose is already installed.${RC}"
    fi
  fi
}

init_groups() {
  clear
  if command_exists usermod; then
    printf "%b\n" "${YELLOW}Do you want to add $(whoami) to the docker group?:${RC}"
    printf "%b" "Enter your choice [Y/n]: "
    read -r CHOICE_2

    case "$CHOICE_2" in
    N | n)
      return 0
      ;;
    *)
      "$ESCALATION_TOOL" usermod -aG docker "$(whoami)"
      ;;
    esac
  else
    printf "%b\n" "${RED}The command 'usermod' does not exist!${RC}"
  fi
}

setup_autostart() {
  if command_exists systemctl; then
    printf "%b\n" "${GREEN}Adding docker as a service to start automatically!${RC}"
    "$ESCALATION_TOOL" systemctl enable --now docker
  else
    printf "%b\n" "${RED}The command 'systemctl' does not exist!${RC}"
  fi
}

checkEnv
checkEscalationTool
install_components
init_groups
setup_autostart
