#!/bin/sh

set -eu

if [ -e /run/puavo/nbd-server ]; then
  exit 0
fi

grubedit() {
  grubenv_path='/images/boot/grub/grubenv'
  if ! grub-editenv "$grubenv_path" "$@"; then
    echo 'Creating new grubenv because of an error' >&2
    grub-editenv "$grubenv_path" create
    grub-editenv "$grubenv_path" "$@"
  fi
}

setup_puavo_os_boot_default() {
  grubedit set "puavo_grub_boot_default=puavo-os"

  # do not set the default image/mode boot option if image has been updated
  # after last reboot, or this host is not personally administered
  if [ /run/puavo/init-puavo.log -ot /images/ltsp.img \
       -o "$(puavo-conf puavo.admin.personally_administered)" != 'true' ]; then
    grubedit unset puavo_grub_puavo_os_default_image
    grubedit unset puavo_grub_puavo_os_default_mode
    return 0
  fi

  image_path=$(puavo-conf puavo.image.path)
  if [ -z "$image_path" ]; then
    echo 'Could not determine puavo.image.path' >&2
    return 1
  fi

  default_image="${image_path#/}"

  default_mode='normal'
  if [ "$(puavo-conf puavo.image.overlay)" = 'personal' ]; then
    default_mode='developer'
  fi

  grubedit set "puavo_grub_puavo_os_default_image=${default_image}"
  grubedit set "puavo_grub_puavo_os_default_mode=${default_mode}"
}

boot_default="$(puavo-conf puavo.grub.boot_default)"
case "$boot_default" in
  abitti2)
    grubedit set "puavo_grub_boot_default=abitti2"
    ;;
  puavo-os)
    setup_puavo_os_boot_default
    ;;
  windows)
    grubedit set "puavo_grub_boot_default=windows"
    ;;
  *)
    echo "Unsupported boot mode '${boot_default}'" >&2
    ;;
esac

# XXX just cleanup old stuff
grubedit unset default
