#!/bin/sh

# Copyright (c) 2023 Jolla Ltd.
#
# License: Jolla Proprietary

appsupport_run_hook_script() {
    _HOOK_SCRIPT_PATH="$1"
    _HOOK_TYPE="$2"

    if [ -z "$CONTAINER_CONFIG_PATH" ]; then
        echo "appsupport_run_hook_scripts() internal error, \$CONTAINER_CONFIG_PATH not defined!" >&2
        exit 32
    fi

    if [ ! -d "$_HOOK_SCRIPT_PATH" ]; then
        # Skip non-existing hook script paths.
        return
    fi

    . "$CONTAINER_CONFIG_PATH/init_variables"

    if [ -z "$APPSUPPORT_API" ]; then
        echo "appsupport_run_hook_scripts() internal error!" >&2
        exit 32
    fi

    echo "Running ${_HOOK_TYPE}hooks from $(basename $_HOOK_SCRIPT_PATH)..."

    for HOOK_SCRIPT in $(ls -1 "$_HOOK_SCRIPT_PATH" | sort); do

        # Ignore files ending with ~
        # Certain vim configurations leave these backup files
        # around causing bad headache
        case "$HOOK_SCRIPT" in
            *~) continue ;;
        esac

        if [ ! -x "$_HOOK_SCRIPT_PATH/$HOOK_SCRIPT" ]; then
            echo "Skipping non-executable $HOOK_SCRIPT"
            continue
        fi

        # Re-source init variables during each round so that
        # variables defined in hook scripts are available for the
        # subsequent scripts.
        . "$CONTAINER_CONFIG_PATH/init_variables"

        echo "Running $HOOK_SCRIPT"

        HOOK_SCRIPT_NAME="$_HOOK_SCRIPT_PATH/$HOOK_SCRIPT" \
            $_HOOK_SCRIPT_PATH/$HOOK_SCRIPT

        _HOOK_RET=$?
        if [ $_HOOK_RET -ne 0 ]; then
            echo "Failed to run hook $_HOOK_SCRIPT_PATH/$HOOK_SCRIPT : $_HOOK_RET"
            exit 32
        fi
    done
}

appsupport_run_hook_scripts() {
    # First run built-in hooks
    appsupport_run_hook_script "$BASE_INSTALL_PATH/init/$1"

    # Then run possible user hooks
    appsupport_run_hook_script "/etc/appsupport.conf.d/init/$1" "user "
}

appsupport_init_export() {
    if [ -z "$CONTAINER_CONFIG_PATH" ]; then
        echo "appsupport_init_export() internal error, \$CONTAINER_CONFIG_PATH not defined!" >&2
        exit 32
    fi

    echo "export $@" | tee -a "$CONTAINER_CONFIG_PATH/init_variables"
}

appsupport_init_source() {
    _INSTANCE_NAME=$1
    _CONFIG_INSTANCE=
    if [ -n "$_INSTANCE_NAME" ]; then
        _CONFIG_INSTANCE="--instance $_INSTANCE_NAME"
    fi

    _CONTAINER_CONFIG_PATH="$(appsupport-config $_CONFIG_INSTANCE --path)"
    if [ ! -f "$_CONTAINER_CONFIG_PATH/init_variables" ]; then
        echo "appsupport_init_source() internal error, init variables not defined." >&2
        exit 32
    fi

    . "$_CONTAINER_CONFIG_PATH/init_variables"
}
