#!/bin/bash
function init_ws {
	# customize build_linux_samsung.sh and run to generate tima_config.h
	cp ../../../boot_images/QcomPkg/$1/build_linux_samsung.sh ../../../boot_images/QcomPkg/$1/build_linux_samsung_ta.sh
	sed -i '/cd $XBL_BUILD_DIR/{n;s/^/#/}' ../../../boot_images/QcomPkg/$1/build_linux_samsung_ta.sh
	sed -i '/cd $RPM_BUILD_DIR/{n;s/^/#/}' ../../../boot_images/QcomPkg/$1/build_linux_samsung_ta.sh
	sed -i '/cd $TZ_BUILD_DIR/{n;s/\.\/buildss\.sh/\.\/local_buildss\.sh/}' ../../../boot_images/QcomPkg/$1/build_linux_samsung_ta.sh
	sed -i '/cd $SLPI_BUILD_DIR/{n;s/^/#/}' ../../../boot_images/QcomPkg/$1/build_linux_samsung_ta.sh
	sed -i 's/^QPSA_SIGNING$/#QPSA_SIGNING/' ../../../boot_images/QcomPkg/$1/build_linux_samsung_ta.sh
	sed -i '/cd $COMMON_BUILD_DIR/{n;s/^/#/}' ../../../boot_images/QcomPkg/$1/build_linux_samsung_ta.sh
	sed -i 's/^MAKE_EMERGENCY_TOOL$/#MAKE_EMERGENCY_TOOL/' ../../../boot_images/QcomPkg/$1/build_linux_samsung_ta.sh
	../../../boot_images/QcomPkg/$1/build_linux_samsung_ta.sh

	chmod u+w ${QC_TA_BUILD_DIR}/tbc_cleanpack.py.md5
	chmod u+w ${QC_TA_BUILD_DIR}/build_parms.py
}

# $1 - BUILD_CHIP
function include_tz_libraries_to_app_folders {
	case ${1} in
		msm8996)
			# all required libraries
			lib_directories=(
			"../../core/kernel/libstd/build"
			"../../core/securemsm/trustzone/qsapps/libs/applib/common_applib/build"
			"../../core/securemsm/trustzone/qsapps/libs/applib/qsee/build"
			"../../core/securemsm/trustzone/qsapps/libs/applib/proxy/build"
			"../../core/securemsm/trustzone/qsee/mink/libstd/build"
			)
			include_lib_in_tz_app=("pay_auth" "cncc_pay" "amex_pay" "amex_payv2" "mc_pay" "plcc_pay" "visa_pay" "dc_pay" "tch_mc" "paypal")
			for lib in ${lib_directories[@]}
			do
				for tz_app in ${include_lib_in_tz_app[@]}
				do
					rm -rf $lib/$tz_app/					#remove existing (local build) to have latest files
					mkdir -p $lib/$tz_app/scorpion/
					cp -Rf $lib/sampleapp/scorpion/ $lib/$tz_app/
				done
			done
			# secure ui, touch related libraries
			lib_directories=(
			"../../core/securemsm/sse/log/build"
			"../../core/securemsm/sse/qsee/SecureDisplay/zlib/build"
			"../../core/securemsm/sse/qsee/SecureDisplay/libgd/build"
			"../../core/securemsm/sse/qsee/SecureDisplay/libpng/build"
			"../../core/securemsm/sse/qsee/SecureTouch/drTs/controller/build"
			"../../core/securemsm/sse/qsee/SecureTouch/drTs/lib/build"
			"../../core/securemsm/sse/qsee/SecureUI/build"
			"../../core/securemsm/sse/qsee/SecureUILib/lib/build"
			"../../core/securemsm/sse/SecureTouch/layout/build"
			"../../core/securemsm/sse/SecureTouch/controller/build"
			)
			include_lib_in_tz_app=("pay_auth")
			for lib in ${lib_directories[@]}
			do
				for tz_app in ${include_lib_in_tz_app[@]}
				do
					rm -rf $lib/$tz_app/					#remove existing (local build) to have latest files
					mkdir -p $lib/$tz_app/scorpion/
					cp -Rf $lib/secure_ui_sample/scorpion/ $lib/$tz_app/
				done
			done
			# bio related libraries
			lib_directories=(
			"../../core/securemsm/trustzone/qsapps/libs/biometric/build"
			)
			include_lib_in_tz_app=("pay_auth")
			for lib in ${lib_directories[@]}
			do
				for tz_app in ${include_lib_in_tz_app[@]}
				do
					rm -rf $lib/$tz_app/					#remove existing (local build) to have latest files
					mkdir -p $lib/$tz_app/scorpion/
					cp -Rf $lib/sampleapp/scorpion/ $lib/$tz_app/
				done
			done
			;;
		msm8998)
			# secure ui, touch related libraries
			lib_directories=(
			"../../core/securemsm/sse/log/build"
			"../../core/securemsm/sse/qsee/SecureDisplay/zlib/build"
			"../../core/securemsm/sse/qsee/SecureDisplay/libgd/build"
			"../../core/securemsm/sse/qsee/SecureDisplay/libpng/build"
			"../../core/securemsm/sse/qsee/SecureTouch/drTs/controller/build"
			"../../core/securemsm/sse/qsee/SecureTouch/drTs/lib/build"
			"../../core/securemsm/sse/qsee/SecureUI/build"
			"../../core/securemsm/sse/qsee/SecureUILib/lib/build"
			"../../core/securemsm/sse/SecureTouch/layout/build"
			"../../core/securemsm/sse/SecureTouch/controller/build"
			)
			include_lib_in_tz_app=("pay_auth")
			for lib in ${lib_directories[@]}
			do
				for tz_app in ${include_lib_in_tz_app[@]}
				do
					rm -rf $lib/$tz_app/					#remove existing (local build) to have latest files
					mkdir -p $lib/$tz_app/scorpion/
					cp -Rf $lib/secure_ui_sample/scorpion/ $lib/$tz_app/
				done
			done
			# bio related libraries
			lib_directories=(
			"../../core/securemsm/trustzone/qsapps/libs/biometric/build"
			)
			include_lib_in_tz_app=("pay_auth")
			for lib in ${lib_directories[@]}
			do
				for tz_app in ${include_lib_in_tz_app[@]}
				do
					rm -rf $lib/$tz_app/					#remove existing (local build) to have latest files
					mkdir -p $lib/$tz_app/scorpion/
					cp -Rf $lib/sampleapp/scorpion/ $lib/$tz_app/
				done
			done
			;;
		*)
			echo "unsupported BUILD_CHIP $1"
			exit 1
			;;
	esac
}

# $1 - BUILD_CHIP, $2 - TA_NAME
function build_clean {
	case ${1} in
		msm8996)
			./build.sh CHIPSET=$1 $2 -c
			./build.sh CHIPSET=$1 $2
			;;
		msm8998)
			python build_all.py -b TZ.BF.4.0 CHIPSET=$1 $2 -c
			python build_all.py -b TZ.BF.4.0 CHIPSET=$1 $2
			;;
		*)
			echo "unsupported BUILD_CHIP $1"
			exit 1
			;;
	esac
}

function sign_amexv2 {
	rm ${BIN_OUT_DIR}/amex_pay.mbn
	echo mv ${BIN_OUT_DIR}/${TA_NAME}.mbn ${BIN_OUT_DIR}/amex_pay.mbn
	mv ${BIN_OUT_DIR}/${TA_NAME}.mbn ${BIN_OUT_DIR}/amex_pay.mbn
	java -jar ${SIGNCLIENT} -model ${SECURE_NAME} -runtype ${RUNTYPE}amex_pay -input ${BIN_OUT_DIR}/amex_pay.mbn -output $1/${TA_NAME/amex/aexp}.mp3
}

if [[ "$1" != msm* ]]; then
	echo "Invalid BUILD_CHIP value : $1"
	echo "Please set BUILD_CHIP appropriately, Values allowed : msm8996, msm8996_LA2, msm8998"
	exit 1
fi

MAX_TA_NAME_LEN=8

BUILD_CHIP=${1:0:7}

case ${BUILD_CHIP} in
	msm8996)
		echo "msm8996"
		QC_ID=IADAANAA
		RUNTYPE=qc_secimg30_
		;;
	msm8998)
		echo "msm8998"
		QC_ID=RAGAANAA
		RUNTYPE=qc_secimg40_
		;;
	*)
		echo "unsupported BUILD_CHIP $BUILD_CHIP"
		exit 1
		;;
esac


QC_TA_BUILD_DIR="${WORKSPACE}/nhlos/trustzone_images/build/ms"
BIN_OUT_DIR="${QC_TA_BUILD_DIR}/bin/${QC_ID}/unsigned"
SECURE_NAME=QSEE_${BUILD_CHIP^^}_TA
SIGNCLIENT="${WORKSPACE}/nhlos/common/build/signclient.jar"

BUILD_DIR="${WORKSPACE}/../builds/${BUILD_NUMBER}"

CMN_QC_PRD_DIR="app/src/cmn_production/assets/ta/qc/${1:3:${#1}}"
CMN_QC_STG_DIR="app/src/cmn_staging/assets/ta/qc/${1:3:${#1}}"

TEE_QC_PRD_DIR="app/src/tee_production/assets/ta/qc/${1:3:${#1}}"
TEE_QC_STG_DIR="app/src/tee_staging/assets/ta/qc/${1:3:${#1}}"

CMN_OUT_DIR_PRD="${BUILD_DIR}/${JOB_NAME}${BUILD_DISPLAY_NAME}_v${P4_CHANGELIST}/${CMN_QC_PRD_DIR}"
CMN_OUT_DIR_STG="${BUILD_DIR}/${JOB_NAME}${BUILD_DISPLAY_NAME}_v${P4_CHANGELIST}/${CMN_QC_STG_DIR}"

OUT_DIR_PRD="${BUILD_DIR}/${JOB_NAME}${BUILD_DISPLAY_NAME}_v${P4_CHANGELIST}/${TEE_QC_PRD_DIR}"
OUT_DIR_STG="${BUILD_DIR}/${JOB_NAME}${BUILD_DISPLAY_NAME}_v${P4_CHANGELIST}/${TEE_QC_STG_DIR}"

PAYMENT_TA_LIST=( "amex_pay" "amex_payv2" "mc_pay" "plcc_pay" "visa_pay" "dc_pay" "tch_mc")
COMMON_TA_LIST=( "cncc_pay" )

mkdir -p $CMN_OUT_DIR_PRD
mkdir -p $CMN_OUT_DIR_STG
mkdir -p $OUT_DIR_PRD
mkdir -p $OUT_DIR_STG

# create a build link to the latest build location
rm -rf ${WORKSPACE}/LATESTBUILD_*
ln -sf ${BUILD_DIR}/${JOB_NAME}${BUILD_DISPLAY_NAME}_v${P4_CHANGELIST} ${WORKSPACE}/LATESTBUILD_${BUILD_DISPLAY_NAME}

cd $QC_TA_BUILD_DIR
rm build-log*

export TIMA_VERSION=3
export TIMA_ENABLED=1

init_ws Msm${1:3:7}Pkg
include_tz_libraries_to_app_folders $BUILD_CHIP

for TA_NAME in "${PAYMENT_TA_LIST[@]}"; do
	echo ====================== BUILD PRODUCTION $TA_NAME TA =======================
	export STAGING_ENV=
	source ${WORKSPACE}/build_version.config

	build_clean $BUILD_CHIP $TA_NAME
	if [ $TA_NAME == "amex_payv2" ]; then
		sign_amexv2 ${OUT_DIR_PRD}
	else
		java -jar ${SIGNCLIENT} -model ${SECURE_NAME} -runtype ${RUNTYPE}${TA_NAME} -input ${BIN_OUT_DIR}/${TA_NAME}.mbn -output ${OUT_DIR_PRD}/${TA_NAME/amex/aexp}.mp3
	fi

	echo ======================== BUILD STAGING $TA_NAME TA ========================
	export STAGING_ENV=true

	build_clean $BUILD_CHIP $TA_NAME
	if [ $TA_NAME == "amex_payv2" ]; then
		sign_amexv2 ${OUT_DIR_STG}
	else
		java -jar ${SIGNCLIENT} -model ${SECURE_NAME} -runtype ${RUNTYPE}${TA_NAME} -input ${BIN_OUT_DIR}/${TA_NAME}.mbn -output ${OUT_DIR_STG}/${TA_NAME/amex/aexp}.mp3
	fi
done

for TA_NAME in "${COMMON_TA_LIST[@]}"; do
	echo ====================== BUILD PRODUCTION $TA_NAME TA =======================
	export STAGING_ENV=
	source ${WORKSPACE}/build_version.config

	build_clean $BUILD_CHIP $TA_NAME
	java -jar ${SIGNCLIENT} -model ${SECURE_NAME} -runtype ${RUNTYPE}${TA_NAME} -input ${BIN_OUT_DIR}/${TA_NAME}.mbn -output ${CMN_OUT_DIR_PRD}/${TA_NAME/amex/aexp}.mp3

	echo ======================== BUILD STAGING $TA_NAME TA ========================
	export STAGING_ENV=true

	build_clean $BUILD_CHIP $TA_NAME
	java -jar ${SIGNCLIENT} -model ${SECURE_NAME} -runtype ${RUNTYPE}${TA_NAME} -input ${BIN_OUT_DIR}/${TA_NAME}.mbn -output ${CMN_OUT_DIR_STG}/${TA_NAME/amex/aexp}.mp3
done

# BUILD pay_auth
TA_NAME=pay_auth
source ${WORKSPACE}/build_version.config
export UX3_0=true

if [[ "$1" = msm8996_LA2 ]] || [[ "$1" = msm8998 ]]; then
	echo SUPPORT_IRIS=true
	export SUPPORT_IRIS=true
fi

if [[ "$1" = msm8998 ]]; then
	echo SUPPORT_SOFTKEY=true
	export SUPPORT_SOFTKEY=true
fi

for R in 640 480 320; do
	export TUI_DPI=$R
	TUI_DIR="360-xxxhdpi"
	if [ ${R} == 480 ]; then
		TUI_DIR="360-xxhdpi"
	elif [ ${R} == 320 ]; then
		TUI_DIR="360-xhdpi"
	fi
	echo ====================== BUILD PRODUCTION $TA_NAME TA for $TUI_DPI =======================
	export STAGING_ENV=
	mkdir -p $CMN_OUT_DIR_PRD/$TUI_DIR/

	build_clean $BUILD_CHIP $TA_NAME
	java -jar ${SIGNCLIENT} -model ${SECURE_NAME} -runtype ${RUNTYPE}${TA_NAME} -input ${BIN_OUT_DIR}/${TA_NAME}.mbn -output ${CMN_OUT_DIR_PRD}/${TUI_DIR}/${TA_NAME}.mp3

	echo ======================== BUILD STAGING $TA_NAME TA for $TUI_DPI ========================
	export STAGING_ENV=true

	rm -f $TA_NAME.*
	mkdir -p $CMN_OUT_DIR_STG/$TUI_DIR/
	build_clean $BUILD_CHIP $TA_NAME
	java -jar ${SIGNCLIENT} -model ${SECURE_NAME} -runtype ${RUNTYPE}${TA_NAME} -input ${BIN_OUT_DIR}/${TA_NAME}.mbn -output ${CMN_OUT_DIR_STG}/${TUI_DIR}/${TA_NAME}.mp3
done
