#~/bin/bash
# piscal manager script

usage="$(basename "$0") [-h] -d directory_name -f input_filename -- script to manage Piscal

where:
    -h  show this help text
    -d  working directory name
    -o  input filename
    -s  job status"

# http://stackoverflow.com/a/14203146/99492
# http://wiki.bash-hackers.org/howto/getopts_tutorial

# Initialize variables:
base_directory="/home/poprhythm/LeafWeb"
directory_name=""
input_filename=""
get_status=false
pid_filename="piscal.pid"
out_filename="piscal.out"

while getopts "hd:f:s" opt; do
    #echo "$opt = $OPTARG"
    case "$opt" in
    h )
        echo "$usage"
        exit
        ;;
    d )
        directory_name=$OPTARG
        ;;
    f )
        input_filename=$OPTARG
        ;;
    s )
        get_status=true
        ;;
    \?) printf "illegal option: -%s\n" "$OPTARG" >&2
        echo "$usage" >&2
        exit 1
        ;;
    esac
done
if [ -z "$directory_name" ]; then
    echo "directory name required (-d)"
    exit 1
fi
if [ ! -d "$base_directory/$directory_name" ]; then
    echo "directory $base_directory/$directory_name not found"
    exit 1
fi
if [ "$get_status" = false ]; then
    if [ -z "$input_filename" ]; then
        echo "input filename required (-f)"
        exit 1
    fi
    
    if [ ! -f "$base_directory/$directory_name/$input_filename" ]; then
        echo "input filename $base_directory/$directory_name/$input_filename not found"
        exit 1
    fi
fi

if [ "$get_status" = true ]; then
    pid_path="$base_directory/$directory_name/$pid_filename"
    
    # if the pid doesn't exist, then process never started
    if [ ! -f "$pid_path" ]; then
        echo "no pid file found"
        exit 1
    fi
    
    pid=$(head -n 1 $pid_path)
    # if the pid exists, check the process status using ps
    if ps -p $pid > /dev/null; then
        # if it is in ps, then it's still running
        echo running
    else
        # otherwise, it is complete, check the output for success/error
        # TODO: examine output for errors, etc
        echo complete
    fi

else
    
    command="sleep 100s"
    nohup ${command} > $base_directory/$directory_name/$out_filename 2>&1 &

    # write the PID to a temp file to check for completion later
    echo $! > $base_directory/$directory_name/$pid_filename

fi