#!/usr/bin/env bash

function is-installed() {
  type "${1}"
}

function start-docker() {
  is-installed "systemctl" || return $?
  is-installed "docker" || return $?

  res="$(systemctl show --property ActiveState docker)" || return $?
  case "${res}" in
    "ActiveState=active")
      # Docker service is active
      true
      ;;
    "ActiveState=inactive")
      # Docker service is inactive -> Let's start it
      echo "Starting docker service ..."
      sudo systemctl start docker || return $?
      sleep 5s
      ;;
    *)
      echo "Unknown state or error!"
      return 1
  esac
}

function build-pkg() {
  # --rm: Remove container after run.
  sudo docker-compose run --rm makepkg "${1}"
}

function push-pkg() {
  arch-repo-push-new || return $?  # Push remote repository
}

function build-and-push() {
  for PKG in "$@"; do
    build-pkg "${PKG}" || return $?
  done
  push-pkg || return $?
}

function main() {
  start-docker || return $?
  is-installed "docker-compose" || return $?

#  PKGS=(xorg-meta de-p1st-systemd de-p1st-sudo de-p1st-screen de-p1st-pacman de-p1st-pacman-mirrorlist de-p1st-networkmanager de-p1st-ucode-placeholder de-p1st-ucode-intel de-p1st-ucode-amd de-p1st-nano de-p1st-mkinitcpio de-p1st-makepkg de-p1st-grub de-p1st-font de-p1st-keyboard-de de-p1st-keyboard-x11-de de-p1st-gnupg de-p1st-redshift de-p1st-theme de-p1st-gpu-generic de-p1st-gpu-amdgpu de-p1st-installer de-p1st-repo)
#  for PKG in "${PKGS[@]}"; do
#    build-pkg "${PKG}" || return $?
#  done

  # Stage1
  build-and-push xorg-meta de-p1st-locale de-p1st-systemd de-p1st-sudo de-p1st-screen de-p1st-htop de-p1st-pacman de-p1st-pacman-mirrorlist de-p1st-networkmanager de-p1st-ucode-placeholder de-p1st-ucode-intel de-p1st-ucode-amd de-p1st-nano de-p1st-mkinitcpio de-p1st-makepkg de-p1st-grub de-p1st-font de-p1st-keyboard-de de-p1st-keyboard-x11-de de-p1st-gnupg de-p1st-redshift de-p1st-theme de-p1st-sddm-autologin-placeholder de-p1st-sddm-autologin-yoda de-p1st-sddm-theme-nordic de-p1st-gpu-generic de-p1st-gpu-amdgpu de-p1st-installer de-p1st-repo || return $?
  # Stage2
  build-and-push de-p1st-smartcard de-p1st-kernel-default de-p1st-kernel-lts de-p1st-dns || return $?
  # Stage3
  build-and-push de-p1st-base || return $?
  # Stage4
  build-and-push de-p1st-xfce4 || return $?
  # Stage5
  build-and-push de-p1st-xfce4-hidpi || return $?

  echo "Successfully built all packages!"
}

main "$@"
