#!/bin/bash

set -eo pipefail

die() {
  local message="$*"

  echo "ERROR: ${message}" >&2
  exit 1
}

fatal_missing_var() {
  local var_name="$1"
  local var_value="${!var_name}"

  if [[ -z "${var_value}" ]] ; then
    die "Missing mandatory environment variable '\$${var_name}', exiting."
  fi
}

fatal_missing_var APPROX_IP_URL
fatal_missing_var APT_CMD
fatal_missing_var APT_OPTS
fatal_missing_var DIST

grub_packages=''
if [[ "$(dpkg-query -f "\${db:Status-Status} \${db:Status-Eflag}" -W grub-pc 2>/dev/null)" = "installed ok" ]]; then
  grub_packages='grub-pc'
elif [[ "$(dpkg-query -f "\${db:Status-Status} \${db:Status-Eflag}" -W grub-efi 2>/dev/null)" = "installed ok" ]]; then
  grub_packages='grub-efi,efibootmgr'
else
  die "Can't detect grub package"
fi

echo "Installing mmdebstrap package"
# shellcheck disable=SC2086
${APT_CMD} ${APT_OPTS} install mmdebstrap

packages="systemd,systemd-sysv,init,zstd,isc-dhcp-client,ifupdown,eatmydata"
packages="${packages},${grub_packages}"
packages="${packages},mdadm,ca-certificates"

echo "Running mmdebstrap to install a new system"
suites="main contrib non-free"
echo "deb ${DEBIAN_REPO_URL}/debian          ${DIST}          ${suites}
deb ${DEBIAN_REPO_URL}/debian          ${DIST}-updates  ${suites}
deb ${DEBIAN_REPO_URL}/debian-security ${DIST}-security ${suites}
deb ${DEBIAN_REPO_URL}/debian-debug    ${DIST}-debug    ${suites}" | \
  mmdebstrap --no-merged-usr --variant=minbase \
  --include="${packages}" \
  "${DIST}" \
  /ngcp-fallback \
  -

if [[ -f '/ngcp-fallback/etc/apt/sources.list' ]]; then
  mv /ngcp-fallback/etc/apt/sources.list /ngcp-fallback/etc/apt/sources.list.d/debian.list
fi
