#!/usr/bin/env bash
# Wrapper script for mcdisplay-matplotlib-py

############################################
# Start of standard CMake-generated preamble
set -e
FILE=${0}
# First, probe if we are calling script at
# install-time (postinst/postrm) or we are 
# running in an installation "userland"
SCRIPT=`basename $FILE`
if [[ ${SCRIPT} == *.postinst || ${SCRIPT} == *.postrm || ${SCRIPT} == *rpm-tmp* ]];
  then
  MCCODE_BINDIR=/usr/bin
else
  readlinkf(){ python3 -c 'import sys,pathlib
print(pathlib.Path(sys.argv[1]).resolve().absolute())' "$1"
  }
  LINK=$(readlinkf ${FILE}||true)
  if [ "x${LINK}" != "x" ]
 then
    FILE=${LINK}
  fi
  MCCODE_BINDIR="$( cd -P "$( dirname "${FILE}" )" && pwd )"
fi
MCCODE_TOOLDIR="${MCCODE_BINDIR}/../share/mcstas/tools"
MCCODE_LIBDIR="${MCCODE_BINDIR}/../lib"
MCCODE_RESOURCEDIR="${MCCODE_BINDIR}/../share/mcstas/resources"
if [ -d "${MCCODE_TOOLDIR}" ]
 then
    MCCODE_TOOLDIR="$( cd -P "${MCCODE_TOOLDIR}" && pwd )"
else
    MCCODE_TOOLDIR=""
fi
if [ -d "${MCCODE_LIBDIR}" ]
 then
    MCCODE_LIBDIR="$( cd -P "${MCCODE_LIBDIR}" && pwd )"
else
    MCCODE_LIBDIR=""
fi
if [ -d "${MCCODE_RESOURCEDIR}" ]
 then
    MCCODE_RESOURCEDIR="$( cd -P "${MCCODE_RESOURCEDIR}" && pwd )"
else
    MCCODE_RESOURCEDIR=""
fi
# End of standard preamble
############################################

TOOL="mcdisplay"
UTILDIR="${MCCODE_TOOLDIR}/Python/mcdisplay/matplotlib"


#NB: miniconda should be installed next to the tool folder:
if [ -d "${MCCODE_TOOLDIR}/../miniconda3" ]; then
    source "${MCCODE_TOOLDIR}/../miniconda3/bin/activate" "${MCCODE_TOOLDIR}/../miniconda3"
    export PATH=${MCCODE_TOOLDIR}/../miniconda3/bin/:$PATH
fi

canrun() {
    if ! [ -x "${UTILDIR}/${TOOL}.py" ]; then
        exit 127;
    fi

    modules="matplotlib"
    cmd=""
    for name in ${modules}; do
        cmd="${cmd}import ${name}; "
    done
    python3 -c "${cmd}"
}

if ( canrun ); then
    arguments=""
    ncountmax="1e2"
    ncount=""
    trace=""
    next=0
    found_ncount=0
    for arg in "${@}"; do
	if [ "${next}" == "1" ];               # We found -n or --ncount in last pass, this is NUMBER
	then
	    ncount=${arg}
	    found_ncount=1
	    next=0
	elif [[ "${arg}" == "-n" ]];           # Case: -n NUMBER (NUMBER is next pass)
	then
	    next=1
	elif [[ "${arg}" == "--ncount" ]];     # Case: --ncount NUMBER (NUMBER is next pass)
	then
	    next=1
	elif
	    [[ ${arg} =~ ^-n ]];               # Case: -nNUMBER
	then
	    ncount=`echo $arg | cut -f2 -dn`
	elif [[ ${arg} =~ ^--ncount= ]];       # Case: --ncount=NUMBER
	then
	    ncount=`echo $arg | cut -f2 -d=`
	    found_ncount=1
	elif [[ ${arg} =~ ^--trace= ]];       # Case: --trace=NUMBER
	then
	    trace=`echo $arg | cut -f2 -d=`
	elif [[ ${arg} =~ ^--help ]];       # Case: --help
	then
	    script=`basename $0`
	    echo ""
	    echo "$script usage:"
	    echo ""
	    echo "$script [--trace=2] [--ncount=1e2] Instrument.instr par1=A par2=B ..."
	    echo "       --trace={1,2} - select classic / new visualisation mode, 2 is default"
	    echo "       --ncount=N    - set number of particles to trace, max/default N=1e2"
	    echo "             -n N "
	    echo "              -nN "
	    echo ""
	    exit
	else
	    arguments="$arguments $arg"
	fi
    done
    if [ "${trace}" == "" ];
    then
	trace="2"
    fi
    if [ "${found_ncount}" == "1" ];
    then
	ncountmax_bc=`echo $ncountmax | sed s/e/\*10^/g`
	ncount_bc=`echo $ncount | sed s/e/\*10^/g`
	if (( $(echo "${ncount_bc} > ${ncountmax_bc}" |bc -l) ));
	then
	    ncount=$ncountmax
	    echo "WARNING from $0: Reduced your ncount to $ncountmax"
	fi
    else
	ncount=$ncountmax
    fi
    mcrun  $* --trace=$trace --no-output-files -n $ncount | python3 ${UTILDIR}/${TOOL}.py
else
    mcstas_errmsg Failed to run Python ${TOOL} - permissions or missing dependencies\?
fi
