#!/usr/bin/env bash

show_help() {
  echo "Usage: ./start.sh"
  echo ""
  echo "-k or --keycloak if you want to use keycloak as identity provider"
  echo "-d or --down delete all container"
  echo "-wp or --windows-path convert to Windows path"
  echo "-hi or --host-ip set the host ip"
  echo "-hp or --host-port set the host port. Default 8080"
  echo "-w or --wait wait for backend. Default true"
  echo "-aca. Only redeploy ACA and skip the other docker compose services"
  echo "-h or --help"
}

set_keycloak(){
  KEYCLOAK="true"
}

set_windows_path(){
  export COMPOSE_CONVERT_WINDOWS_PATHS=1
}

down(){
  docker-compose down
  exit 0
}

set_host_ip(){
  SET_HOST_IP=$1
}

set_host_port(){
  HOST_PORT=$1
}

set_wait(){
  WAIT=$1
}


# Defaults
WAIT="true"
SET_HOST_IP=""
HOST_PORT="8080"
KEYCLOAK="false"
AIMS_PROPS=""

while [[ $1 == -* ]]; do
  case "$1" in
    -h|--help|-\?) show_help; exit 0;;
    -k|--keycloak)  set_keycloak; shift;;
    -wp|--windows-path)  set_windows_path; shift;;
    -d|--down)  down; shift;;
    -w|--wait)  set_wait $2; shift 2;;
    -hi|--host-ip)  set_host_ip $2; shift 2;;
    -hp|--host-port)  set_host_port $2; shift 2;;
    -*) echo "invalid option: $1" 1>&2; show_help; exit 1;;
  esac
done

if [ -n "${SET_HOST_IP}" ];then
  export HOST_IP=${SET_HOST_IP}
else
  echo "No HOST_IP set, try to figure out on its own ..."
  export HOST_IP=$(ifconfig | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep -v 127.0.0.1 | awk '{ print $2 }' | cut -f2 -d: | head -n1)
fi
echo "HOST_IP: ${HOST_IP}"

if [[ $KEYCLOAK == "true" ]]; then
  AIMS_PROPS="-Dauthentication.chain=identity-service1:identity-service,alfrescoNtlm1:alfrescoNtlm"
fi

export AIMS_PROPS=${AIMS_PROPS}

echo "Start docker compose"
docker-compose -f docker-compose.e2e.yml up -d --build

if [[ $WAIT == "true" ]]; then
  echo "Waiting for the content ..."
  HOST_IP=$HOST_IP HOST_PORT=$HOST_PORT npm run wait:app
  if [ $? == 1 ]; then
    echo "Waiting failed -> exit 1"
    exit 1
  fi
fi