#!/bin/bash

RED='\033[0;31m'
NORMAL='\033[0m'

[ -z ${SLORADO} ] && export SLORADO=slorado
[ -z ${BLUECRAB} ] && export BLUECRAB=blue-crab

${SLORADO} --version &> /dev/null || { echo -e $RED"[pod5-slorado] slorado not found! Either put slorado under path or set SLORADO variable, e.g.,export SLORADO=/path/to/slorado"$NORMAL; exit 1;}
${BLUECRAB} --version &> /dev/null || { echo -e $RED"[pod5-slorado] blue-crab not found! Either put blue-crab under path or set BLUECRAB variable, e.g.,export BLUECRAB=/path/to/blue-crab"$NORMAL; exit 1;}

POD5_COUNT=0
POD5_FILE_ARG=""
OTHER_ARGS=""
for arg in "$@"; do
    case "$arg" in
        *.pod5)
            POD5_FILE_ARGS="$POD5_FILE_ARGS $arg"
            POD5_COUNT=$((POD5_COUNT + 1))
            ;;
        *) OTHER_ARGS="$OTHER_ARGS $arg";;
    esac
done

usage() {
    echo "[pod5-slorado] usage: pod5-slorado basecaller [OPTIONS] /path/to/model /path/to/file.pod5"
    echo "[pod5-slorado] OPTIONS: same as slorado basecaller options"
    exit 1
}

[ "$#" -lt 3 ] && usage

if [ $POD5_COUNT -eq 0 ]; then
    echo -e $RED"[pod5-slorado] No pod5 files were provided"$NORMAL
    exit 1
fi

# may extend with slow5tools merge in the future, but for now, only allow one pod5 file
if [ $POD5_COUNT -gt 1 ]; then
    echo -e $RED"[pod5-slorado] Multiple pod5 files provided. Only one file is allowed."$NORMAL
    exit 1
fi

TEMPORARY_BLOW5_DIR=$(mktemp -d)

[ ! -d ${TEMPORARY_BLOW5_DIR} ] && { echo -e $RED"[pod5-slorado] failed to create temporary directory"$NORMAL; exit 1; }

BLOW5_FILE_ARGS=""
for each in $POD5_FILE_ARGS; do
    if [ ! -f "$each" ]; then
        echo -e $RED"[pod5-slorado] Pod5 file $each not found"$NORMAL
        exit 1
    fi

    BLOW5=${TEMPORARY_BLOW5_DIR}/$(basename "$each" .pod5).blow5

    ${BLUECRAB} p2s $each -o $BLOW5 || { echo -e $RED"[pod5-slorado] failed to convert pod5 to blow5: $each"$NORMAL; rm -f $BLOW5; rmdir ${TEMPORARY_BLOW5_DIR}; exit 1;}

    BLOW5_FILE_ARGS="$BLOW5_FILE_ARGS $BLOW5"
done

${SLORADO} $OTHER_ARGS $BLOW5_FILE_ARGS

test -e ${BLOW5} && rm  ${BLOW5}
test -d ${TEMPORARY_BLOW5_DIR} && rmdir ${TEMPORARY_BLOW5_DIR}