#! /bin/bash
# SPDX-License-Identifier: MIT

. /usr/share/beakerlib/beakerlib.sh || exit 1

function call_test() {
    local func=${1}
    shift
    local cbparams=("$@")
    local funcargs=()

    for v in "${cbparams[@]}"; do
        rlLogInfo "  ${v}: ${!v}"
        funcargs+=("${!v}")
    done
    "${func}" "${funcargs[@]}"
}
function read_varlist() {
    local listfile=${1}
    local func=${2}
    shift 2
    local cbparams=("$@")
    local v1format=("PACKAGE" "FONT_ALIAS" "FONT_LANG" "FONT_WIDTH" "FONT_FAMILY" "DEFAULT_SANS" "DEFAULT_SERIF" "DEFAULT_MONO" "DEFAULT_EMOJI" "DEFAULT_MATH" "FONT_LANG_EXCLUDE_FILES" "FONT_VALIDATE_EXCLUDE_FILES" "FONT_CONF_EXCLUDE_FILES" "FONT_VALIDATE_INDEXES" "FONT_LANG_INDEXES")
    local v2format=("PACKAGE" "FONT_ALIAS" "FONT_LANG" "FONT_WIDTH" "FONT_FAMILY" "DEFAULT_SANS" "DEFAULT_SERIF" "DEFAULT_MONO" "DEFAULT_EMOJI" "DEFAULT_MATH" "DEFAULT_SYSTEMUI" "FONT_LANG_EXCLUDE_FILES" "FONT_VALIDATE_EXCLUDE_FILES" "FONT_CONF_EXCLUDE_FILES" "FONT_VALIDATE_INDEXES" "FONT_LANG_INDEXES")
    declare -A varformat
    varformat[1]="v1format"
    varformat[2]="v2format"

    if [ ! -f "${listfile}" ]; then
        rlDie "File not found: $listfile"
    fi
    version=$(grep -E "^#[[:space:]]+version=" "${listfile}"|sed -e 's/^#[ \t].*version=\([0-9].*\)$/\1/g'|head -1)
    if [ -z "$version" ]; then
        version="1"
    fi
    if [ -z "${varformat[$version]}" ]; then
        rlLogWarning "Invalid version. using version 1: $version"
        version="1"
    fi
    rlLogInfo "  Reading parameters from: ${listfile}"
    rlLogInfo "  List format version: ${version}"
    declare -n refparams="${varformat["$version"]}"
    grep -E -v "^#" "${listfile}" | while IFS=";" read -r "${refparams[@]}" dummy; do
        call_test "$func" "${cbparams[@]}"
    done
}
