#!/usr/bin/bash

if [[ ! -d /sys/firmware/efi/ ]]; then
    exit 0
fi

. /etc/os-release
DISTRO=$(echo ${ID} | sed -e 's/rhel/redhat/' -e 's/\"//')

ARCH=$(uname -m)
AR=x64
if [[ ${ARCH} == aarch64 ]]; then
  AR=aa64
fi

ESP_DIR_A=/boot/efi/EFI
ESP_DIR_B=/boot/efi/EFI_NEW

# default settings
NAME=${DISTRO}
EFI_DEV=$(lsblk -l | grep efi | cut -d' ' -f1)
PARTITION=$(echo ${EFI_DEV} | rev | grep -o "^[0-9]*" | rev)
DEVICE=$(lsblk -l | grep -B1 efi | grep disk | cut -d' ' -f1)
DEVICE="/dev/${DEVICE}"
EFI_PATH="\EFI\${DISTRO}\shim${AR}.efi"

parse_string() {
  for i in "$@"; do
    if [[ $1 == "-L" ]]; then
      shift
      NAME=${1}
    elif [[ $1 == "-d" ]]; then
      shift
      DEVICE=${1}
    elif [[ $1 == "-p" ]]; then
      shift
      PARTITION=${1}
    elif [[ $1 == "-l" ]]; then
      shift
      EFI_PATH=${1}
    else
      shift	
    fi 
  done
}

if [[ ! -d ${ESP_DIR_B} ]]; then
    # create directory for new entry and copy binaries there
    mkdir -p ${ESP_DIR_B}
    cp -R -f -Z ${ESP_DIR_A}/* ${ESP_DIR_B}/.
  
    INSTALL_LOG=/var/log/anaconda/storage.log
    if [[ -f /usr/lib/bootloader/bl.cfg ]]; then
        . /usr/lib/bootloader/bl.cfg
    elif [[ -f ${INSTALL_LOG} ]]; then
        EFI_ENTRY=$(grep "efibootmgr " ${INSTALL_LOG} | cut -d' ' -f5-)
        parse_string ${EFI_ENTRY}
    fi
    EFI_PATH=$(echo ${EFI_PATH} | sed -e 's/EFI/EFI_NEW/' -e 's/\\/\\\\/g')

    # create entry for new EFI_PATH
    NEW_NAME=${NAME}_new
    efibootmgr | grep -q $NEW_NAME
    if [[ $? -eq 0 ]]; then
        old_entry=$(efibootmgr | grep ${NEW_NAME} | cut -d' ' -f1)
        old_entry=$(echo ${old_entry} | sed 's/Boot//' | sed 's/*//')
        efibootmgr -B -b ${old_entry}
    fi

    if [[ -n ${CMDLINE} ]]; then
    # TODO
        echo -n "\nmbl-cloud.uki $(echo ${CMDLINE}) boot=$(awk '/ \/boot / {print $1}' /etc/fstab) rd.system.gpt_auto=0" | iconv -f UTF8 -t UCS-2LE | efibootmgr -C -d ${DEVICE} -p ${PARTITION} -L ${NEW_NAME} -l /EFI_NEW/${DISTRO}/shim${AR}.efi -@ -
    else
        efibootmgr -C -w -L ${NEW_NAME} -d ${DEVICE} -p ${PARTITION} -l ${EFI_PATH}
    fi

    if [[ ! -f /usr/lib/bootloader/bl.cfg ]]; then
        cat > /usr/lib/bootloader/bl.cfg << EOF
NAME=${NAME}
DEVICE=${DEVICE}
PARTITION=${PARTITION}
EFI_PATH=${EFI_PATH}
EOF
        if [[ -n ${CMDLINE} ]]; then
            cat >> /usr/lib/bootloader/bl.cfg << EOF
CMDLINE=${CMDLINE}
EOF
        fi
    fi

fi
