#!/bin/bash

POSITIONAL_ARGS=()
KEEPDB='false'

while [[ $# -gt 0 ]]; do
  case $1 in
    -m|--mode)
      MODE="$2"
      shift # past argument
      shift # past value
      ;;
    -t|--topology)
      TOPOLOGY="$2"
      shift # past argument
      shift # past value
      ;;
    -s|--sdnconfig)
      SDNCONFIG="$2"
      shift # past argument
      shift # past value
      ;;
    --keepdb)
      KEEPDB="true"
      shift # past argument
      ;;
    -*|--*)
      echo "Unknown option $1"
      exit 1
      ;;
    *)
      POSITIONAL_ARGS+=("$1") # save positional arg
      shift # past argument
      ;;
  esac
done

start_gosdn () {
    # Start controller
    cd controller
    GOSDN_ADMIN_PASSWORD="admin" make start &
    pid=$!
    cd ..
}

if [ $MODE = 'start' ];
then
    echo "Need sudo rights."
    sudo echo "sudo rights granted"
    # Start databases, etc.
    docker compose up -d

    # Start clab topology
    if [ $KEEPDB = 'true' ];
    then
        sudo containerlab deploy -t $TOPOLOGY
        start_gosdn
    else
        sleep 5
        start_gosdn
        ./artifacts/venv-manager --mode deploy --topology $TOPOLOGY  --sdnconfig $SDNCONFIG
    fi

    echo "#########################################################################################"
    echo "Initialisation finished. You will now see the output of goSDN. Press Ctrl+C to stop it."
    wait $pid
fi

if [ $MODE = 'stop' ];
then
    docker compose down
    sudo containerlab destroy -t $TOPOLOGY -c
    rm -f dev_env_data/clab/.*.bak
fi