#!/bin/bash
#set -x
###########################################################
THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
###########################################################

black='\E[30m'
red='\E[31m'
green='\E[32m'
yellow='\E[33m'
blue='\E[34m'
magenta='\E[35m'
cyan='\E[36m'
white='\E[37m'

ROOT_UID=0
E_NOTROOT=67

trim ()
{
    echo "$1" | sed -n '1h;1!H;${;g;s/^[ \t]*//g;s/[ \t]*$//g;p;}'
}


cecho()   # Color-echo
# arg1 = message
# arg2 = color
{
    local default_msg="No Message."
    message=${1:-$default_msg}
    color=${2:-$black}
    echo -e "$color"
    echo -n "$message"
    tput sgr0
    echo
    return
}

echo_error() {
    local my_string=""
    until [ -z "$1" ]
    do
        my_string="$my_string$1"
        shift
        done
        cecho "$my_string" $red
}

echo_warning() {
    local my_string=""
    until [ -z "$1" ]
    do
        my_string="$my_string$1"
        shift
    done
    cecho "$my_string" $yellow
}

echo_success() {
    local my_string=""
    until [ -z "$1" ]
    do
        my_string="$my_string$1"
        shift
    done
    cecho "$my_string" $green
}

bash_exec() {
    output=$($1 2>&1)
    result=$?
    if [ $result -eq 0 ]
    then
        echo_success "$1"
    else
        echo_error "$1: $output"
    fi
}

wait_process_started () {
  if  [ -z "$1" ]
  then
    echo_error "WAITING FOR PROCESS START: NO PROCESS"
    return 1
  fi
  ps -C $1 > /dev/null 2>&1
  while [ $? -ne 0 ]; do
    echo_warning "WAITING FOR $1 START"
    sleep 2
    ps -C $1 > /dev/null 2>&1
  done
  echo_success "PROCESS $1 STARTED"
  return 0
}

wait_process_ended () {
  if  [ -z "$1" ]
  then
    echo_error "WAITING FOR PROCESS START: NO PROCESS"
    return 1
  fi
  pkill $1
  ps -C $1 > /dev/null 2>&1
  while [ $? -eq 0 ]; do
    echo_warning "WAITING FOR $1 END"
    pkill $1
    sleep 2
    ps -C $1 > /dev/null 2>&1
  done
  echo_success "PROCESS $1 ENDED"
  return 0
}

assert() {
  # If condition false
  # exit from script with error message
  E_PARAM_ERR=98
  E_PARAM_FAILED=99
  
  if [ -z "$2" ] # Not enought parameters passed.
  then
    return $E_PARAM_ERR
  fi
  
  lineno=$2
  if [ ! $1 ]
  then
    echo "Assertion failed:  \"$1\""
    echo "File \"$0\", line $lineno"
    exit $E_ASSERT_FAILED
  fi
}

control_c()
# run if user hits control-c
{
  echo -en "\n*** Exiting ***\n"
  pkill NASRGdummy
  wait_process_ended NASRGdummy
  sleep 1
  pkill LTE_RAL_ENB
  wait_process_ended LTE_RAL_ENB
  sleep 1
  cp /tmp/log_RAL_DUMMY ./log_RAL_DUMMY.txt
  exit $?
}


trap control_c SIGINT
#set_openair

echo "Starting LTE Link SAP"
pkill NASRGdummy
sleep 1
pkill LTE_RAL_ENB

echo "Starting DUMMY-RAL-ENB ..."
./DUMMY-RAL-ENB/LTE_RAL_ENB >/tmp/log_RAL_DUMMY 2>&1 &
wait_process_started LTE_RAL_ENB

echo "Starting NASRGdummy ..."
./DUMMY-RAL-ENB/NASRGdummy

echo "End"

