#!/bin/bash

set -eEuo pipefail

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

  if [[ -z "${var_value}" ]]; then
    echo "Missing mandatory environment variable '\$${var_name}', exiting." >&2
    exit 1
  fi
}

NGCP_VERSION="$(cat /etc/ngcp_version)"
fatal_missing_var NGCP_VERSION

BLK_ID="$(blkid "${CURRENT_PARTITION}" -o value | head -1)"
fatal_missing_var BLK_ID

current_lvm='root'
if [[ "${CURRENT_PARTITION}" =~ fallback ]]; then
  current_lvm='fallback'
fi
LVM_ID="$(lvs -o lv_name,lv_uuid | awk "/${current_lvm}/ {print \$2}")"
fatal_missing_var LVM_ID

K_VERSION="$(uname -r)"
fatal_missing_var K_VERSION

echo "Adding grub fallback entry to ${NGCP_VERSION}"

file_number=90
file="$(find /ngcp-fallback/etc/grub.d/ -type f -name "${file_number}_*")"
while [[ -n "${file}" ]]; do
  if [[ "${file_number}" -eq 99 ]]; then
    echo "ERROR: Can't find a free number for /ngcp-fallback/etc/grub.d/ file" >&2
    echo "ERROR: There are /ngcp-fallback/etc/grub.d/90..99_ files" >&2
    echo "ERROR: Please check them and free some number" >&2
    exit 1
  fi
  file_number=$(( file_number + 1 ))
  file="$(find /ngcp-fallback/etc/grub.d/ -type f -name "${file_number}_*")"
done

echo "INFO: '${NGCP_VERSION}' '${BLK_ID}' '${LVM_ID}' '${K_VERSION}' '${CURRENT_PARTITION}'"

cp /usr/share/ngcp-upgrade/grub-template /ngcp-fallback/etc/grub.d/"${file_number}"_ngcp_"${NGCP_VERSION}"
sed -ri "s|__NGCP_VERSION__|${NGCP_VERSION}|;s|__BLK_ID__|${BLK_ID}|;s|__LVM_ID__|${LVM_ID}|;s|__K_VERSION__|${K_VERSION}|;s|__NGCP_PARTITION__|${CURRENT_PARTITION}|g" \
  /ngcp-fallback/etc/grub.d/"${file_number}"_ngcp_"${NGCP_VERSION}"
chmod +x /ngcp-fallback/etc/grub.d/"${file_number}"_ngcp_"${NGCP_VERSION}"
