#!/bin/sh
set -e

# Helper functions for programs that work with satellite files.

show_help() {
echo "Script with helper functions for working with satellite files.
Usage: $0 <satellite file> <function> [arguments]

Functions:
variable <name>     | Get variable set in the header
downloads           | Get all download urls
options             | List all available options and their descriptions"
}

if [ $# -lt 2 ]; then
    show_help
    exit 1
fi

satellite="$(realpath "$1")"
function="$2"

# Functions reused in all wrappers
global="$(printf '
    download_only=true

    import() {
        . "%s/functions/$1.sh"
    }

    # Allowed external utility commands
    cut() { "%s" "$@"; }
    expr() { "%s" "$@"; }
' "$(dirname "$satellite")" "$(command -v cut)" "$(command -v expr)")"

if [ "$function" = "variable" ]; then
    name="$3"
    if [ ! "$name" ]; then
        show_help
        exit 1
    fi

    printf "$global"'
        header_end() {
            variable="$%s"
            [ "$variable" ] && echo "$variable"
            exit $?
        }
        . %s
    ' "$name" "$satellite" | PATH= /bin/sh 2> /dev/null
elif [ "$function" = "downloads" ]; then
    printf "$global"'
        download() {
            [ "$1" ] && echo "$1"
        }
        dlextract() {
            [ "$1" ] && echo "$1"
        }
        dlfile() {
            [ "$1" ] && echo "$1"
        }
        header_end() { exit 0; }
        . %s
    ' "$satellite" | PATH= /bin/sh 2> /dev/null
elif [ "$function" = "options" ]; then
    printf "$global"'
        define_option() {
            [ "$1" ] && echo "$1"
        }
        header_end() { exit 0; }
        . %s
    ' "$satellite" | PATH= /bin/sh 2> /dev/null
else
    show_help
    exit 1
fi