#!/usr/bin/env -S tcsh -f
set script_path=`realpath $0 | xargs dirname`
set script_name=`realpath $0 | xargs basename`
set package=pyoptiwize
set version=python3.12
set wheel=`ls -t $script_path:h/dist/*whl | head -1`
while($#argv > 0 )
    set opt="$argv[1]"
    shift
    switch($opt)
        case "-h":
        case "--help":
             goto help
        case "-clean":
            \rm -rf venv* >& /dev/null
            exit 0
        case "-w":
        case "--from_wheel":
            set from_wheel
            breaksw
        case "-r":
        case "--force_reinstall":
            set reinstall
            breaksw
        case "-p":
        case "--python_version":
            set version="$argv[1]"
            shift
            if( $version !~ "python3.1[1-3]" ) then
                echo "\nERROR: only python versions python3.11, python3.12 and python3.13 are supported\n"
                exit(1)
            endif
            breaksw
        default:
            echo "\nERROR: switch $opt is not supported\n"
            goto help
    endsw
end
set version_digits=`echo $version | tr -d '[a-z].'`
set log=$PWD/${script_name}_${version_digits}.log
set prompt='%U%m%u:%B%~%b%#'
set venv_root="venv_${version_digits}"
if(! -f $venv_root/bin/activate.csh ) then
    echo "Establishing python virtual environment in $PWD/${venv_root} directory"
    ${version} -m venv $venv_root
else
    echo "Virtual environment in $PWD/${venv_root} directory already exists"
endif
source ${venv_root}/bin/activate.csh
pip show -q ${package}
if($status || $?reinstall) then
    if( $?reinstall) then
        echo "Reinstalling $package ..."
    else
        echo "Installing $package ..."
    endif
    if($?from_wheel) then
        echo "From wheel: $wheel"
        pip install $wheel
        echo "Installing pytest ..."
        pip install `$script_path:h/bin/package_optional_dependencies.py $wheel`
    else
        pip install '.[test]'
    endif
else
    echo "$package has been already installed, `pip show -V optexamples | grep Version`"
endif
set rundir=/tmp/optimization_tutorial_${USER}_$$
echo "Run directory: $rundir" |& tee $log
\rm -rf $rundir >& /dev/null
mkdir -p $rundir
cd $rundir
set python_path=`which python`
set venv_path=$python_path:h:h
echo $venv_path
\rm -rf $venv_path/lib/${version}/site-packages/*mathsat* >& /dev/null
\cp -p /usr/local/lib/${version}/dist-packages/*mathsat* $venv_path/lib/${version}/site-packages
\rm -rf $venv_path/lib/${version}/site-packages/z3 >& /dev/null
\cp -rp /usr/lib/python3/dist-packages/z3 $venv_path/lib/${version}/site-packages
\cp -rp $venv_path/lib/${version}/site-packages/${package} .
set cmd="env PYTHONDONTWRITEBYTECODE=1 pytest -v --forked -m forked $PWD/${package}/examples"
echo $cmd |& tee -a $log
$cmd |& tee -a $log
set cmd="env PYTHONDONTWRITEBYTECODE=1 pytest -v -s -m 'not forked' $PWD/${package}/examples"
echo $cmd | tr '\047' '"' |& tee -a $log
echo $cmd | tr '\047' '"' | source /dev/stdin |& tee -a $log
exit($status)
help:
    echo "$script_name [[-h|--help] | [-clean] | [-w|--from_wheel] [-r|--force_reinstall] [-p|--python_version <version>]"
    echo "                                   -h --help:             display this help message"
    echo "                                   -clean:                clean all workareas $PWD/venv_31*"
    echo "                                   -w --from_wheel:       install $package from wheel $wheel:t"
    echo "                                   -r --force_reinstall:  reinstall $package in existing workarea"
    echo "                                   -p --python_version:   use python<version>"
    echo "Supported python versions:" python3.1{1,2,3}
    echo "Default python version:    python3.12"
    echo "Workarea root directory:   $PWD/venv_31[1|2|3]"
    echo ""
    exit(1)
