#!/bin/bash

set -e

. assert.sh -v -x

PWD="../"
RELEASE_DIRECTORY="target/release"
WALLET_ADDRESS_CONST=n1435n84se65tn7yv536am0sfvng4yyrwj7thhxr
MOCK_HOST="1.2.3.4"
RANDOM_ID=$(for i in {1..8}; do echo -n $(($RANDOM % 10)); done)
ID="test-${RANDOM_ID}"
BINARY_NAME="nym-gateway"

# install the current release binary
# so this is dependant on running on a linux machine for the time being

curl -L "https://builds.ci.nymte.ch/master/${BINARY_NAME}" -o $BINARY_NAME
chmod u+x $BINARY_NAME

#--------------------------------------
# functions
#--------------------------------------

check_gateway_binary_build() if [ -f "$BINARY_NAME" ]; then
  echo "running init tests"
  # we wont use config env files for now
  # unless we want to use a specific environment
  OUTPUT=$(./${BINARY_NAME} --output json init --id ${ID} --host ${MOCK_HOST} --wallet-address ${WALLET_ADDRESS_CONST}) >/dev/null 2>&1

  # get jq values for things we can assert against
  VALUE=$(echo ${OUTPUT} | jq .data_store)
  VALUE=${VALUE#\"}
  VALUE=${VALUE%\"}

  #------------------------------------------------------
  DATA_STORE="${HOME}/.nym/gateways/${ID}/data/db.sqlite"
  #------------------------------------------------------

  # do asserts here based upon the output
  # check the data store path

  assert "echo ${VALUE}" $(echo ${DATA_STORE})
  assert_end nym-gateway-tests
else
  echo "exting test no binary found"
fi

#----------------------------------------------------------------------------------------------------------
# tests
#----------------------------------------------------------------------------------------------------------

# we run the release version first
check_gateway_binary_build
# whoami
# this is dependant on where it runs on ci potentially, will need to tweak this in the future
first_init=$(cat ${HOME}/.nym/gateways/${ID}/config/config.toml | grep -v "^\[gateway\]$" | grep -v "^version =" | grep -v "^cosmos_mnemonic =")

#lets remove the binary then navigate to the target/release directory for checking the latest version
if [ -f "$BINARY_NAME" ]; then
  echo "removing nym-gateway"
  rm -rf "$BINARY_NAME"
  echo "successfully removed nym-gateway"
else
  echo "no binary found exiting"
  exit 1
fi

#----------------------------------------------------------------------------------------------------------
# we should expect it to pass because no errors should be presented when performing the upgrade of an init
# this should be caught at testing stage - navigate to latest binary build
#----------------------------------------------------------------------------------------------------------

cd ${PWD}${RELEASE_DIRECTORY}

#re run against the current binary built locally

check_gateway_binary_build

echo "diff the config files after each init"
echo "-------------------------------------"

second_init=$(cat ${HOME}/.nym/gateways/${ID}/config/config.toml | grep -v "^\[gateway\]$" | grep -v "^version =" | grep -v "^cosmos_mnemonic =")

diff -w <(echo "$first_init") <(echo "$second_init")

# check the status of the diff
if [ $? -eq 0 ]; then
  echo "no differences in config files, exiting script"
  exit 0
else
  echo "there are differences in the config files, it may require a fresh init on the binary"
  exit 1
fi
