#!/usr/bin/env bash
# Reset TASK
# Description: Resets a namespace in OIO-SDS.

main() {
	. oio-ga-tools-utils
	readonly TASK="RESET_NAMESPACE"

	if [ -z "$(gridinit_cmd)" ]; then
	  log "ERROR" "No gridinit_cmd binary found. Aborting"
	  exit 1
	fi

	while getopts ":n:s:u:" opt; do
    case $opt in
      n)
        NS=$OPTARG
        ;;
      u)
        ADMIN_URL=$OPTARG
        ;;
      s)
        HOST=$OPTARG
        ;;
      \?)
        log "WARN" "Invalid option provided -$OPTARG"
        exit 1
        ;;
      :)
        log "WARN" "Option -$OPTARG requires argument."
        exit 1
        ;;
    esac
  done

	m0_stop_required=true
  gridinit_cmd stop @meta0 &> /dev/null || m0_stop_required=false

  if $m0_stop_required; then
		timeout=30
    log "INFO" "Waiting for meta0 to shut down"

		while [[ $(gridinit_cmd status | grep meta0 | grep -c UP) -ne 0 ]]; do
			sleep 1
			if [[ $(( timeout-- )) -lt 0 ]]; then  # Meta0 doesn't want to shut down, kill it
				log "INFO" "Killing meta0"
				pid=$(gridinit_cmd status | grep meta0 | grep UP | awk '{ print $3 }')
				kill -9 $pid
			fi
		done
	fi

	log "INFO" "Shutting down all other services"
	gridinit_cmd stop
	DIR_ROUTE="${ADMIN_URL}/api/v2/namespaces/$NS/servers/${HOST}/dirs-to-create"
	dirs=$(curl -s -f "$DIR_ROUTE")
  dirs=${dirs:1:-1}
	log "INFO" "Removing data files in directories: $dirs"
	rm -rf $dirs
	log "INFO" "Removing configuration files in /etc/gridinit.d/$NS-* and /etc/oio/sds/$NS"
	rm -rf /etc/gridinit.d/$NS-* /etc/oio/sds/$NS
	log "INFO" "Removing logs in /var/log/oio/sds/$NS"
	rm -rf /etc/oio/sds/$NS
	gridinit_cmd reload
	log "INFO" "Namespace $NS reset."
	exit 0
}

. $(dirname $0)/oio-ga-tools-logger main "$@"
