#!/usr/bin/env bash

set +o nounset
set +o noclobber

: ${debug_flags:="-search"} ${debug_flag:=0} ${trace_flags:="-search -backtrace"} ${trace_flag:=0}

while (( $# > 0 ))
do
  token="$1"
  case "$token" in

    --help)
      extension_args=("core" "help" "$@")
      break
      ;;

    -v|--version)
      extension_args=("core" "version" "$@")
      break
      ;;

    --trace)
      trace_flags+=" all"
      ;;

    --trace=*)
      trace_flags+=" ${token##--trace=}"
      ;;

    --debug)
      debug_flags+=" all"
      debug_flag=1
      ;;

    --debug=*)
      debug_flags+=" ${token##--debug=}"
      debug_flag=1
      ;;

    --module=*)
      preload_modules+=( ${token##--module=} )
      ;;

    --call=*)
      call_action="${token##--call=}"
      [[ "$call_action" =~ \/ ]] && preload_modules+=( ${call_action%/*} ) || true
      call_action="${call_action##*/}"
      ;;

    --)
      shift #end of processing
      extension_args=("$@")
      break
      ;;

    -*)
      error "Unknown flag '${token}'"
      ;;
    *)
      if [[ -f $token ]]
      then
        bdsm_script=$1
      else
        extension_args=("$@")
        break
      fi
      ;;
  esac
  shift
done

if (( $# == 0 )) && [[ -z "$extension_args" ]]
then
  extension_args=()
fi

PS4="# \${BASH_SOURCE##\${bdsm_path}\/extensions\/} \${FUNCNAME[0]:+\${FUNCNAME[0]}()} \${LINENO} $ "
export PS4

if [[ " ${trace_flags} " =~ " all " ]]
then
  trace_flag=1
  set -x
fi

debug_flags="${debug_flags## }"
trace_flags="${trace_flags## }"

export debug_flag debug_flags trace_flag trace_flags extension_args bdsm_script
