#!/bin/bash
#set -euo pipefail

# Enable verbose shell output if FRR_SH_VERBOSE is set to 'true'
if [[ "${FRR_SH_VERBOSE:-}" == "true" ]]; then
  set -x
fi

# The argument to the command is the operation to be performed
# frr-node display display_env 
# a cmd must be provided, there is no default
cmd=${1:-""}

# The frr user id, by default it is going to be frr:frr
frr_user_id=${FRR_USER_ID:-""}

# frr options
frr_options=${FRR_OPTIONS:-""}

# This script is the entrypoint to the image.
# frr.sh version (update when API between daemonset and script changes - v.x.y)
frr_version="3"

# The daemonset version must be compatible with this script.
# The default when FRR_DAEMONSET_VERSION is not set is version 3
frr_daemonset_version=${FRR_DAEMONSET_VERSION:-"3"}

# hostname is the host's hostname when using host networking,
# This is useful on the master
# otherwise it is the container ID (useful for debugging).
frr_pod_host=${K8S_NODE:-$(hostname)}

# The ovs user id, by default it is going to be root:root
frr_user_id=${FRR_USER_ID:-""}

# frr options
frr_options=${FRR_OPTIONS:-""}

# frr.conf variables
ocp_asn=${OCPASN:-65000}
ocp_routerid=${OCPROUTERID:-"10.10.10.1"}
ocp_peer=${OCPPEER:-"10.10.10.1"}

FRR_ETCDIR=/etc/frr
FRR_RUNDIR=/var/run/frr
FRR_LOGDIR=/var/log/frr

# =========================================

setup_frr_permissions() {
    chown -R ${frr_user_id} ${FRR_RUNDIR}
    chown -R ${frr_user_id} ${FRR_LOGDIR}
    chown -R ${frr_user_id} ${FRR_ETCDIR}
}

# =========================================

display_version() {
  echo " =================== hostname: ${frr_pod_host}"
  echo " =================== daemonset version ${frr_daemonset_version}"
  if [[ -f /root/git_info ]]; then
    disp_ver=$(cat /root/git_info)
    return
  fi
}

display_env() {
  echo FRR_USER_ID ${frr_user_id}
  echo FRR_OPTIONS ${frr_options}
  echo frr.sh version ${frr_version}
  echo ocp_asn ${ocp_asn}
  echo ocp_routerid ${ocp_routerid}
  echo ocp_peer ${ocp_peer}
}

# frr-node - all nodes
frr-node() {
  trap 'kill $(jobs -p) ; exit 0' TERM
  rm -f ${FRR_RUNDIR}/frr.pid
  echo "=============== frr-node ========== update frr.conf"
  sed -i "s/OCPASN/$ocp_asn/" /etc/frr/frr.conf
  sed -i "s/OCPPEER/$ocp_peer/" /etc/frr/frr.conf
  sed -i "s/OCPROUTERID/$ocp_routerid/" /etc/frr/frr.conf

  #chown -R frr:frr /etc/frr
  chown -R frr:frr ${FRR_RUNDIR}
  echo "=============== frr-node ========== starting"
  # /usr/lib/frr/frrinit.sh start
  # bash -x /usr/lib/frr/frrinit.sh start
  bash -x 
  /usr/lib/frr/frrinit.sh start
  frrResult=$?
  echo "=============== frrinit result is ${frrResult} " 
 
  # Sleep forever
  exec tail -f /dev/null
}

echo "================== frr.sh --- version: ${frr_version} ================"

display_version

display_env

case ${cmd} in
"frr-node") 
  frr-node
  ;;
"display_env")
  display_env
  exit 0
  ;;
"display")
  display
  exit 0
  ;;
*)
  echo "invalid command ${cmd}"
  echo "valid v3 commands: frr-node display_env display " 
  exit 0
  ;;
esac

exit 0