#! /bin/bash

if [ ! -e ${TEST_ROOT}/etc/aosc-arm.conf ]; then
	echo "AOSC OS ARM version configuration file not found." >&2
	exit 1
fi

source ${TEST_ROOT}/etc/aosc-arm.conf

if [ "$1" = "autoflash" ]; then
	if [ "$2" = "$AUTOFLASH_KEY" ]; then
		export FLASHER_CAPABILITIES="$AUTOFLASH_CAPABILITIES"
		exec "$0"
	else
		exit 0
	fi
fi

if [ ! "$DEVICE_NAME" ]; then
	echo "No device specified." >&2
	exit 1
fi

if [ ! "$FLASHER_SOLUTION" ]; then
	available_sols=""

	if [ ! -d ${TEST_ROOT}/usr/lib/aosc-os-arm-boot-flasher/solutions ]; then
		echo "Cannot find any solutions installed." >&2
		exit 1
	fi

	for i in ${TEST_ROOT}/usr/lib/aosc-os-arm-boot-flasher/solutions/*
	do
		source "$i"
		current_sol=$(basename "$i")
		if "${current_sol}_is_available"; then
			available_sols+=" ${current_sol}"
		fi
	done

	if [ "${available_sols}" = "" ]; then
		echo "No available solution found." >&2
		exit 1
	fi

	echo "Available solutions: ${available_sols}"
	echo "Please choose one solution: "
	read used_sol

	found=0
	for i in $available_sols
	do
		if [ "$i" = "$used_sol" ]; then
			found=1
			break
		fi
	done

	if ((\!$found)); then
		echo "Invalid solution." >&2
		exit 1
	fi
else
	if [ -e "${TEST_ROOT}/usr/lib/aosc-os-arm-boot-flasher/solutions/${FLASHER_SOLUTION}" ]; then
		source "${TEST_ROOT}/usr/lib/aosc-os-arm-boot-flasher/solutions/${FLASHER_SOLUTION}"
		used_sol="${FLASHER_SOLUTION}"
	else
		echo "Invalid solution specified in aosc-arm.conf or environment variables." >&2
		exit 1
	fi
fi

_sol_flash_cap_varname="${used_sol}_flash_cap"

if  ! [ "${!_sol_flash_cap_varname}" ]; then
	echo "No flashing capabilities are defied for the solution." >&2
	exit 1
fi

if [ ! "$FLASHER_CAPABILITIES" ]; then
	echo "Available flashing capabilities: ${!_sol_flash_cap_varname}"
	echo "Please choose capbilities which is intended to be executed: "
	read used_cap
else
	used_cap="$FLASHER_CAPABILITIES"
fi

for i in $used_cap
do
	found=0
	for j in ${!_sol_flash_cap_varname}
	do
		if [ "$j" = "$i" ]; then
			found=1
			break
		fi
	done
	if ((\!$found)); then
		echo "Capbility $i not found!" >&2
		exit 1
	fi
done

for i in $used_cap
do
	if ! "${used_sol}_do_flash_${i}"; then
		echo "Error when flashing $i" >&2
		exit 1
	fi
done
