#!/bin/bash

# Help page
showHelp() {
    cat << EOF
Usage: ./landscaper -i <input-file> -o <output-directory> [--cores/--seed/--rownames/--colnames/--memgb/-h/-v]
Landscaper: Snakemake workflow to perform Energy Landscape Analysis

    -i, -input,         --input                 Input file (e.g., data/testdata.tsv, mandatory)

    -o, -outdir,        --outdir                Output directory (e.g., output, mandatory)

    -c, -cores,         --cores                 Number of cores to use Snakemake (e.g., default value is 10, optional)

    -s, -seed,          --seed                  Random seed used when visualize status network

    -r, -rownames,      --rownames              Row/sample names for data matrix

    -l, -colnames,      --colnames              Column/variable names for data matrix

    -m, -memgb,         --memgb                 Memory usage (GB, e.g., default value is 10, optional)

    -h, -help,          --help                  Display help

    -v, -version,       --version               Version of this workflow

EOF
}

# Default Values
INPUT=""
OUTDIR=""
CORES=10
SEED=123456
ROWNAMES=""
COLNAMES=""
MEMGB=10
VERSION="v1.1.0"

# Command Argument Parsing
while getopts i:o:c:s:r:l:m:h-:v- opt; do
	optarg="$OPTARG"
	[[ "$opt" = - ]] &&
	    opt="-${OPTARG%%=*}" &&
	    optarg="${OPTARG/${OPTARG%%=*}/}" &&
	    optarg="${optarg#=}"
    case "-$opt" in
        -i|--input)
            INPUT="$optarg"
            ;;
        -o|--outdir)
            OUTDIR="$optarg"
            ;;
        -c|--cores)
            CORES="$optarg"
            ;;
        -s|--seed)
            SEED="$optarg"
            ;;
        -r|--rownames)
            ROWNAMES="$optarg"
            ;;
        -l|--colnames)
            COLNAMES="$optarg"
            ;;
        -m|--memgb)
            MEMGB="$optarg"
            ;;
        -h|--help)
            showHelp
            exit 0
            ;;
        -v|--version)
            echo $VERSION
            exit 0
            ;;
        \?)
            exit 1
            ;;
    esac
done
shift $((OPTIND - 1))

# Perform Snakemake Workflow
snakemake -j $CORES --config input=$INPUT outdir=$OUTDIR seed=$SEED rownames=$ROWNAMES colnames=$COLNAMES --resources mem_gb=$MEMGB
