#!/bin/bash
# Copyright 2019,2020 NXP
#
# SPDX-License-Identifier: Apache-2.0
#

# Pass zipped MW as argument to script.
# Filename of zip archive is supposed to as:
#
# se050_mw_v[NN].[NN].[NN].zip
#
# For example: se050_mw_v02.07.00.zip

#
# 2019-08-28 Updated for v02.11.00
# - python3 instead of python available on i.MX platform
#
# 2019-07-24 Updated for v02.10.00
# - Zip archive now has additional 'simw_top' toplevel directory
#

# Global variables
# ----------------
root_dir="/home/root"

# UTILITY FUNCTIONS
# -----------------
# execCommand will stop script execution when the program executed did not return OK (i.e. 0) to the shell
execCommand () {
    local command="$*"
    echo ">> ${command}"
    ${command}
    local nRetProc="$?"
    if [ ${nRetProc} -ne 0 ]
    then
        echo "\"${command}\" failed to run successfully, returned ${nRetProc}"
        exit 2
    fi
    echo ""
}

dummyCommand () {
    local command="$*"
    echo ">> ${command}"
    # ${command}
    local nRetProc="$?"
    if [ ${nRetProc} -ne 0 ]
    then
        echo "\"${command}\" failed to run successfully, returned ${nRetProc}"
        exit 2
    fi
    echo ""
}

if [ -z "$1" ]; then
    echo "Please provide zip archive containing MW as argument"
    exit 2
else
    mw_package="$1"
fi

# Cd to directory where script is stored
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo ${SCRIPT_DIR}
cd ${SCRIPT_DIR}

echo "Installing ${mw_package}"
mw_dir_name=${mw_package%.*} # Back delete
mw_build_area_dir_name="${mw_dir_name}/simw-top_build"

# This script is being modified so it is no longer tied to a specific revision.
# The initial version only worked for 02.07.00

mw_name=${mw_package%.zip} # strip .zip extension
mw_version=${mw_name#*_mw_} # only keep vNN.NN.NN
echo ${mw_version}
# Check on version (filename based) and only use with version 02.07.00
# if [ "${mw_version}" != "v02.07.00" ]; then
    # echo "This MW installation script contains patches specific to version v02.07.00"
    # echo "It cannot be used to install ${mw_package} (version=${mw_version})"
    # echo "Error: Failed to install package ${mw_package}"
    # exit 4
# fi

# Check for unlikely date (in case NTP server is not reacheable date defaults to build date of Yocto image)

atLeastDate=$(date -d 2020-01-12 +%s)
currentDate=$(date +%s)

if [ ${currentDate} -le ${atLeastDate} ]; then
    echo "System date is not correct:"
    date
    echo "You can manually set the date like"
    echo "   date -s '2019-05-07 14:20'"
    echo "and then rerun the script"
    echo ""
    echo "Note: a wrong system date may cause compilation and installation issues"
    exit 5
fi


# Ensure target directory does not yet exist
if [ -d "${root_dir}/${mw_dir_name}" ]; then
    echo "Installation error: ${root_dir}/${mw_dir_name} already exists"
    echo "Error: Failed to install package ${mw_package}"
    exit 3
fi

# Ensure build directory does not yet exist
if [ -d "${root_dir}/${mw_build_area_dir_name}" ]; then
    echo "Installation error: ${root_dir}/${mw_build_area_dir_name} already exists"
    echo "Error: Failed to install package ${mw_package}"
    exit 3
fi

execCommand "mkdir -p ${root_dir}/mnt"
execCommand "mkdir ${root_dir}/${mw_dir_name}"
execCommand "cp ${mw_package} ${root_dir}/${mw_dir_name}"
execCommand "cd ${root_dir}/${mw_dir_name}"
execCommand "unzip ${mw_package}"
execCommand "cd ${root_dir}/${mw_dir_name}/simw-top"
execCommand "python3 scripts/create_cmake_projects.py"
execCommand "rm ${root_dir}/${mw_dir_name}/${mw_package}"

execCommand "cd ${root_dir}/${mw_build_area_dir_name}/imx_native_a7x_sci2c"
execCommand "cmake -L ."
execCommand "cmake -DSE05X_Auth:STRING=None -DSCP:STRING=SCP03_HostCrypto ."

execCommand "cmake --build ."
execCommand "make install"
execCommand "ldconfig /usr/local/lib"

execCommand "cd ${root_dir}/${mw_dir_name}/simw-top"
find . -name "*.sh" -exec chmod 755 {} \;
execCommand "cd pycli/src"
execCommand "python3 setup.py develop"

# Compile TLS client
execCommand "cd ${root_dir}/${mw_dir_name}/simw-top/demos/linux/tls_client/build"
execCommand "cmake ../."
execCommand "cmake --build ."

# #########################################
# Verification (In case SE050 is connected)
# cd ../../sss/plugin/openssl/scripts
# python3 openssl_provisionEC.py prime192v1 t1oi2c none
# python3 openssl_EccSign.py prime192v1
