#!/bin/bash
ID=rosa
GRUBDIR=/boot/grub2
MNTPOINT=/boot/efi
DEBUG=no

echo_exit() {
    [ "$DEBUG" != 'no' -o "$2" -ne 0 ] && echo "$1"
    exit $2
}

# continue if EFI
[ -d /sys/firmware/efi ] || echo_exit "/sys/firmware/efi not found. Aborting $0" 0

# continue if x86_64 or x86
ARCH=$(arch)
echo $ARCH |grep -q "86" || echo_exit "arch is not x86" 0

# continue only if bootloaders installed by Rosa
[ "$(find /boot -name 'rosa-iso-build*')" ] || echo_exit "File rosa-iso-build not found. Aborting $0" 0

# If live OS no need to install bootloader
# anaconda install grub earlier
if losetup |grep -q 'LiveOS/rootfs.img' ; then
    echo "Rosa live detected, skip grub2-install; update-grub2"
else
    grub2-install $(df -h /boot | (read; awk '{print $1; exit}'|sed 's/[[:digit:]]*$//'))
    # update-grub2
fi

# continue if grub
[ -d "$GRUBDIR" ]   || echo_exit "$GRUBDIR not found. Aborting $0" ${LINENO}

pushd $MNTPOINT >/dev/null
EFIDIR="$(ls -1d {EFI,efi,Efi} |tail -n1)"
[ "$EFIDIR" ] || EFIDIR=EFI

pushd ${EFIDIR} >/dev/null
df -t vfat ./ 2>/dev/null 1>&2 || exit ${LINENO}
[ -d "$ID" ] || echo_exit "${EFIDIR}/$ID not found. Aborting $0" ${LINENO}

BOOTDIR=$(ls -1d {BOOT,boot,Boot} |tail -n1)
[ "$BOOTDIR" ] || BOOTDIR='BOOT'
mkdir -p $BOOTDIR

# continue if /EFI/BOOT is empty, or if rosa bootloaders in /EFI/BOOT
[ "$(ls -1 $BOOTDIR)" ] && [ ! -f "$BOOTDIR/${ID}.readme" ] && \
echo_exit "${EFIDIR}/${BOOTDIR} must be empty or contain Rosa bootloaders. Aborting $0" ${LINENO}

PREFIX=x64
[ "$ARCH" != 'x86_64' ] && PRREFIX=ia32

rm -f ${BOOTDIR}/{BOOT*.efi,grub*.efi,mm*.efi,rosa.readme} 2>/dev/null
cp -f ${ID}/{grub${PREFIX}.efi,mm${PREFIX}.efi} ${BOOTDIR}/  2>/dev/null 
if [ -f ${ID}/shim${PREFIX}.efi ] ; then 
    cp -f ${ID}/shim${PREFIX}.efi ${BOOTDIR}/BOOT${PREFIX}.efi
elif [ -f ${ID}/grub${PREFIX}.efi ] ; then
    cp -f ${ID}/grub${PREFIX}.efi ${BOOTDIR}/BOOT${PREFIX}.efi
else
    echo_exit "Efi bootloader not found, need shim${PREFIX}.efi or grub${PREFIX}.efi" ${LINENO}
fi
cat << EOF > "${BOOTDIR}/${ID}.readme"
Rosa efi boot hook. Do not remove this file.
Files in ${EFIDIR}/${BOOTDIR}/  were copied from the ${EFIDIR}/${ID}/
EOF
popd >/dev/null
popd >/dev/null
