#!/bin/bash
# Copyright (c) 2018-2023 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0

# Take the data found in subdirectories of the metrics 'results' directory,
# and turn them into a PDF report. Use a Dockerfile containing all the tooling
# and scripts we need to do that.

set -e

SCRIPT_PATH=$(dirname "$(readlink -f "$0")")
source "${SCRIPT_PATH}/../lib/common.bash"

IMAGE="${IMAGE:-metrics-report}"
DOCKERFILE="${SCRIPT_PATH}/report_dockerfile/Dockerfile"

HOST_INPUT_DIR="${SCRIPT_PATH}/../results"
R_ENV_FILE="${HOST_INPUT_DIR}/Env.R"
HOST_OUTPUT_DIR="${SCRIPT_PATH}/output"

GUEST_INPUT_DIR="/inputdir/"
GUEST_OUTPUT_DIR="/outputdir/"

# If in debugging mode, we also map in the scripts dir so you can
# dynamically edit and re-load them at the R prompt
HOST_SCRIPT_DIR="${SCRIPT_PATH}/report_dockerfile"
GUEST_SCRIPT_DIR="/scripts/"

setup() {
	echo "Checking subdirectories"
	check_subdir="$(ls -dx ${HOST_INPUT_DIR}/*/ 2> /dev/null | wc -l)"
	if [ $check_subdir -eq 0 ]; then
		die "No subdirs in [${HOST_INPUT_DIR}] to read results from."
	fi

	echo "Checking Dockerfile"
	check_dockerfiles_images "$IMAGE" "$DOCKERFILE"

	mkdir -p "$HOST_OUTPUT_DIR" && true

	echo "inputdir=\"${GUEST_INPUT_DIR}\"" > ${R_ENV_FILE}
	echo "outputdir=\"${GUEST_OUTPUT_DIR}\"" >> ${R_ENV_FILE}

	# A bit of a hack to get an R syntax'd list of dirs to process
	# Also, need it as not host-side dir path - so short relative names
	resultdirs="$(cd ${HOST_INPUT_DIR}; ls -dx */)"
	resultdirslist=$(echo ${resultdirs} | sed 's/ \+/", "/g')
	echo "resultdirs=c(" >> ${R_ENV_FILE}
	echo "	\"${resultdirslist}\"" >> ${R_ENV_FILE}
	echo ")" >> ${R_ENV_FILE}
}

run() {
	docker run -ti --rm -v ${HOST_INPUT_DIR}:${GUEST_INPUT_DIR} -v ${HOST_OUTPUT_DIR}:${GUEST_OUTPUT_DIR} ${extra_volumes} ${IMAGE} ${extra_command}
	ls -la ${HOST_OUTPUT_DIR}/*
}

help() {
	usage=$(cat << EOF
Usage: $0 [-h] [options]
   Description:
        This script generates a metrics report document
        from the results directory one level up in the
        directory tree (../results).
   Options:
        -d,         Run in debug (interactive) mode
        -h,         Print this help
EOF
)
	echo "$usage"
}

main() {

	local OPTIND
	while getopts "d" opt;do
		case ${opt} in
		d)
			# In debug mode, run a shell instead of the default report generation
			extra_command="bash"
			extra_volumes="-v ${HOST_SCRIPT_DIR}:${GUEST_SCRIPT_DIR}"
			;;
		?)
		    # parse failure
		    help
		    die "Failed to parse arguments"
		    ;;
		esac
	done
	shift $((OPTIND-1))

	setup
	run
}

main "$@"
