#!/usr/bin/env bash

ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0

SELF_NAME="grub-functions"

PATH_GRUB="/memory/data/from/0/boot/grub/"

exec_get_all_menuentry(){
## Показать все варианты загрузки из grub_*.cfg   grub_*_addon.cfg   grub_*_boothdd.cfg
    FILE_OSRELEASE="/usr/lib/os-release"
    NAME_DISTRIB=$(sed -En "/VARIANT=/{s/VARIANT=\"(.*)\"/\1/p}" ${FILE_OSRELEASE})
    VER_DISTRIB=$(sed -En "/VERSION_ID=/{s/VERSION_ID=(.*)/\1/p}" ${FILE_OSRELEASE})

    FILE_GRUB_MAIN="${PATH_GRUB}/ublinux/grub_${LANG%_*}.cfg"
    if [[ -f ${FILE_GRUB_MAIN} ]]; then
        sed -En "/menuentry/{
	    /(ISO|Install|Установка)/!{
	        s/^[ \t]*//
	        s/\\$\{NAME_DISTRIB\}/${NAME_DISTRIB}/
	        s/\\$\{VER_DISTRIB\}/${VER_DISTRIB}/
	        s/menuentry \"(.*${NAME_DISTRIB}.*${VER_DISTRIB}.*)\" .*/\1/p
	    }
        }" ${FILE_GRUB_MAIN}
    fi


    FILE_GRUB_ADDON="${PATH_GRUB}/ublinux/grub_${LANG%_*}_addon.cfg"
    if [[ -f ${FILE_GRUB_ADDON} ]]; then
        NAME_MENU_GRUB_ADDON=$(sed -En "/${FILE_GRUB_ADDON##*/}/{x;{s/menuentry \"(.*)\" .*/\1/p};d;}; x" ${FILE_GRUB_MAIN})
        sed -En "/menuentry/{
	    /(ISO|Install|Установка)/!{
	        s/^[ \t]*/${NAME_MENU_GRUB_ADDON}>/
	        s/\\$\{NAME_DISTRIB\}/${NAME_DISTRIB}/
	        s/\\$\{VER_DISTRIB\}/${VER_DISTRIB}/
	        s/menuentry \"(.*${NAME_DISTRIB}.*${VER_DISTRIB}.*)\" .*/\1/p
	    }
        }" ${FILE_GRUB_ADDON}
    #"
    fi

    FILE_GRUB_BOOTHDD="${PATH_GRUB}/ublinux/grub_${LANG%_*}_boothdd.cfg"
    if [[ -f ${FILE_GRUB_BOOTHDD} ]]; then
        NAME_MENU_GRUB_BOOTHDD=$(sed -En "/${FILE_GRUB_BOOTHDD##*/}/{x;{s/menuentry \"(.*)\" .*/\1/p};d;}; x" ${FILE_GRUB_MAIN})
        sed -En "/menuentry/{
	    /(Back|Возврат)/!{
	        s/^[ \t]*/${NAME_MENU_GRUB_BOOTHDD}>/
	        s/\\$\{VER_DISTRIB\}/${VER_DISTRIB}/
	        s/menuentry \"(.*)\" .*/\1/p
	    }
        }" ${FILE_GRUB_BOOTHDD}
    #"
    fi

    FILE_GRUB_LOCAL="${PATH_GRUB}/ublinux/grub_local.cfg"
    if [[ -f ${FILE_GRUB_LOCAL} ]]; then
        NAME_MENU_GRUB_LOCAL=$(sed -En "/${FILE_GRUB_LOCAL##*/}/{x;{s/menuentry \"(.*)\" .*/\1/p};d;}; x" ${FILE_GRUB_MAIN} | sed -E "s/^[[:blank:]]//")
        sed -En "/menuentry/{
	    /(Back|Возврат)/!{
	        s/^[ \t]*/${NAME_MENU_GRUB_LOCAL}>/
	        s/\\$\{VER_DISTRIB\}/${VER_DISTRIB}/
	        s/menuentry \"(.*)\" .*/\1/p
	    }
        }" ${FILE_GRUB_LOCAL}
    #"
    fi
}

exec_get_last_menuentry(){
## Показать последний выбранный вариант загрузки
    FILE_GRUBENV="${PATH_GRUB}/grubenv"
    sed -En "/saved_entry=/{s/saved_entry=(.*)/\1/p}" ${FILE_GRUBENV}
}

################
##### MAIN #####
################

    # Если файл подключен как ресурс с функциями, то выйти
    return 0 2>/dev/null && return 0
    if [[ -z $@ ]]; then
	true
#        while read -r FUNCTION; do
#            $"${FUNCTION##* }"
#        done < <(declare -F | grep "declare -f exec_")
    else
	FUNCTION=
	while [[ $# -gt 0 ]]; do
	    [[ -z ${1} ]] || { declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"; }
	    shift
	done
	eval ${FUNCTION#*; }
    fi

