#!/usr/bin/env bash

if [ "x$MCPLTESTS_TESTTOOL" == "x" ]; then
    MCPLTESTS_TESTTOOL=sb_mcpl_tool
fi
DD="$SBLD_DATA_DIR/MCPLTestsFMT2"
F2="$DD/reffile_16.mcpl"
F1=rf16cp.mcpl
cp "$F2" $F1
F1_HL=rf16cp_hl.mcpl
ln "$F1" "$F1_HL"
F1_SL=rf16cp_sl.mcpl
ln -s "$F1" "$F1_SL"
F2_SL=rf16_sl.mcpl
ln -s "$F2" "$F2_SL"
cp "$DD/reffile_5.mcpl" rf5cp.mcpl
cp "$DD/reffile_5.mcpl.gz" rf5cp.mcpl.gz
FC=rfcrash.mcpl
FCGZ=rfcrash.mcpl.gz
cp "$DD/reffile_crash.mcpl" $FC
cp "$DD/reffile_crash.mcpl.gz" $FCGZ
echo lasfsdfsfla > fake.mcpl
cp fake.mcpl fake.mcpl.gz
echo lala > fake2.mcpl
gzip -f fake2.mcpl
cp $DD/reffile_empty.mcpl rfempty.mcpl
cp $DD/reffile_empty.mcpl.gz rfempty.mcpl.gz
cp "$DD/miscphys.mcpl.gz" .
FMISC="miscphys.mcpl.gz"
cp miscphys.mcpl.gz miscphysnogz.mcpl.gz
gunzip miscphysnogz.mcpl.gz
FMISCNOGZ=miscphysnogz.mcpl

function cmd()
{
    echo "----------------------------------------------"
    echo "Running $MCPLTESTS_TESTTOOL ""$@" | sed "s#$SBLD_DATA_DIR/MCPLTestsFMT2/#MCPLTestsFMT2/data/#"
    echo "----------------------------------------------"
    $MCPLTESTS_TESTTOOL "$@"
    if [ $? != 0 ]; then
        echo "===> Command failed!"
    fi
}

function check_same()
{
    CSF1="$1"
    CSF2="$2"
    if [ ! -f "$CSF1" -o ! -f "$CSF2" ]; then
        #no files, no check
        return
    fi
    echo "===> Checking that $CSF1 and $CSF2 have identical contents."
    if [[ "$CSF1" == *.gz ]]; then
        cat "$CSF1" | gunzip > tmp_check_f1.mcpl
        CSF1="tmp_check_f1.mcpl"
    fi
    if [[ "$CSF2" == *.gz ]]; then
        cat "$CSF2" | gunzip > tmp_check_f2.mcpl
        CSF2="tmp_check_f2.mcpl"
    fi
    diff -q "$CSF1" "$CSF2" >& /dev/null
    if [ $? != 0 ]; then
        echo "===> Check failed!"
        #exit 1
    fi
}
#Test various options (also illegal ones):
cmd -h
cmd --help
cmd --h
cmd --version
cmd --v
cmd $F1 --justhead
cmd $F1 --ju
cmd $F1 -j
cmd $F1 --nohead
cmd $F1 --n
cmd $F1 --n -m --inplace
cmd $F1 --ju -l2
cmd $F1 --ju -s1
cmd $F1 -l2 -r
cmd $F1 --v --h
cmd $F1 --v --m --inplace
cmd $F1 -l0 -s2
cmd $F1 -l2 -s0
cmd $F1 -m --inplace "$F2"
cmd $F1 -l0
#this gives warning on purpose:
cmd $F1 --mer --inpl "$F1"
cmd $F1 -l0
#this gives warning on purpose:
cmd $F1 --m --inplac "$F1"
cmd $F1 -l0
#this gives warning on purpose:
cmd $F1 --merge --inplace "$F1"
#lots of warnings:
cmd -m dupmerge.mcpl "$F1" "./$F1" ../$(basename $PWD)"/$F1" "$F1_SL" "$F1_HL" "$F2_SL" "$F2_SL"
cmd -m --inplace dupmerge.mcpl "./dupmerge.mcpl"
cmd -m --inplace dupmerge.mcpl dupmerge.mcpl
cmd $F1 -l0
cmd -l0 -s2 "$DD/reffile_5.mcpl.gz"
cmd -l0 -s2 "$DD/reffile_5.mcpl"
cmd -l0 -s2 "$DD/reffile_empty.mcpl"
cmd -l0 -s2 "$DD/reffile_empty.mcpl.gz"
cmd -m --inplace rf5cp.mcpl "$DD/reffile_5.mcpl.gz"
cmd -m --inpla   rf5cp.mcpl.gz "$DD/reffile_5.mcpl"
cmd -m --inplac  rf5cp.mcpl.gz "$DD/reffile_5.mcpl.gz"
cmd $FC
cmd --repair $FC
cmd $FC
cmd --r $FC
cmd $FC
cmd -r $FCGZ
cmd $FC
cmd -r $F1
cmd rfempty.mcpl
cmd -r rfempty.mcpl
cmd rfempty.mcpl
cmd rfempty.mcpl.gz
cmd -r rfempty.mcpl.gz
cmd rfempty.mcpl.gz
cmd fake.mcpl
cmd fake.mcpl.gz
cmd fake2.mcpl.gz
cmd -e $FMISC extracted_1
cmd --extract -p2112 $FMISC extracted_1
cmd --extract -p-11 $FMISC extracted_2
cmd -ep-1000020040 $FMISCNOGZ extracted_3
cmd -e -p1000922350 $FMISC extracted_4
cmd -e -p111 -l999999 -s150 $FMISCNOGZ extracted_5
cmd -l0 extracted_1.mcpl.gz
cmd -l0 extracted_2.mcpl.gz
cmd -l0 extracted_3.mcpl.gz
cmd -l0 extracted_4.mcpl.gz
cmd -l0 extracted_5.mcpl.gz
#this works because the embedded comment from extracting is (so far) identical:
cmd --merge merged_new_file.mcpl extracted_1.mcpl.gz extracted_2.mcpl.gz
cmd --merge merged_1to5_new_filea.mcpl extracted_1.mcpl.gz extracted_2.mcpl.gz extracted_3.mcpl.gz extracted_4.mcpl.gz extracted_5.mcpl.gz
if [ -f extracted_1.mcpl.gz ]; then gunzip extracted_1.mcpl.gz; fi
if [ -f extracted_2.mcpl.gz ]; then gunzip extracted_2.mcpl.gz; fi
cmd --merge merged_1to5_new_fileb.mcpl extracted_1.mcpl extracted_2.mcpl extracted_3.mcpl.gz extracted_4.mcpl.gz extracted_5.mcpl.gz
check_same merged_1to5_new_filea.mcpl merged_1to5_new_fileb.mcpl
cmd --merge --inplace extracted_1.mcpl extracted_2.mcpl
cmd extracted_1.mcpl
check_same merged_new_file.mcpl extracted_1.mcpl
check_same miscphys.mcpl.gz miscphysnogz.mcpl
cmd --merge --inplace extracted_1.mcpl extracted_3.mcpl.gz extracted_4.mcpl.gz extracted_5.mcpl.gz
check_same extracted_1.mcpl merged_1to5_new_fileb.mcpl
if [ -f extracted_3.mcpl.gz ]; then gunzip extracted_3.mcpl.gz; fi
if [ -f extracted_4.mcpl.gz ]; then gunzip extracted_4.mcpl.gz; fi
if [ -f extracted_5.mcpl.gz ]; then gunzip extracted_5.mcpl.gz; fi
cmd --extract -p2112 $FMISCNOGZ extracted_1_new.mcpl
cmd --extract -p-11 $FMISCNOGZ extracted_2_new.mcpl
cmd -e -p1000922350 $FMISCNOGZ extracted_4_new.mcpl
if [ -f extracted_1_new.mcpl.gz ]; then gunzip extracted_1_new.mcpl.gz; fi
if [ -f extracted_2_new.mcpl.gz ]; then gunzip extracted_2_new.mcpl.gz; fi
if [ -f extracted_4_new.mcpl.gz ]; then gunzip extracted_4_new.mcpl.gz; fi
cmd --merge merged_1to5_new_filec.mcpl extracted_1_new.mcpl extracted_2_new.mcpl extracted_3.mcpl extracted_4_new.mcpl extracted_5.mcpl
cmd --merge --inplace extracted_1_new.mcpl extracted_2_new.mcpl extracted_3.mcpl extracted_4_new.mcpl extracted_5.mcpl
check_same merged_1to5_new_filec.mcpl extracted_1_new.mcpl
check_same merged_1to5_new_filea.mcpl merged_1to5_new_filec.mcpl
#mistakes with --merge but no --inplace should fail:
cmd --merge extracted_1.mcpl extracted_2.mcpl
#too few pars:
cmd --merge --inplace extracted_1.mcpl
cmd --merge newfile.mcpl
