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

if [ $1 ] ; then
    DEBUG=yes
    [ $1 == '--force' ] && FORCE='yes'
fi

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 -Eq 'LiveOS/rootfs.img|layer-base/0' ] ; then
    echo "Rosa live detected, skip grub2-install"
else
    grub2-install $(df -h /boot | (read; awk '{print $1; exit}'|sed 's/[[:digit:]]*$//'))
fi

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

pushd $MNTPOINT >/dev/null
EFIDIR="$(ls -1d {EFI,efi,Efi} 2>/dev/null |tail -n1)"
[ "$EFIDIR" ] || EFIDIR="EFI"
mkdir -p ${EFIDIR}
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} 2>/dev/null |tail -n1)
[ "$BOOTDIR" ] || BOOTDIR='BOOT'
mkdir -p $BOOTDIR
if [ "$FORCE" != 'yes' ] ; then
    # 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}
fi

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

rmdir ${BOOTDIR} 2>/dev/null || (rm -rf ${BOOTDIR}.bak ; mv -f ${BOOTDIR} ${BOOTDIR}.bak)
mkdir -p $BOOTDIR
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
