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

echo_exit() {
    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
EFIDIR="$(ls -1d {EFI,efi,Efi} |tail -n1)"
[ "$EFIDIR" ] || EFIDIR=EFI

pushd ${EFIDIR}
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}/{BOOTx64.efi,grub.cfg,grubx64.efi,mmx64.efi,rosa.readme}
cp -f ${ID}/{grub.cfg,grubx64.efi,mmx64.efi} ${BOOTDIR}/
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}/BOOT/  were copied from the ${EFIDIR}/rosa/
EOF
popd
popd
