#!/bin/bash
PROGRAM="$(basename $0)"
# set -xe
if [ -z $1 ]
then
    echo "Please provide a SHA512 hash"
    exit 1
fi
if [ -z $2 ]
then
    echo "Please an output filename"
    exit 2
fi

echo $1 | grep "[0123456789abcdef]\{128\}"
if [ $? -ne 0 ]
then
    echo "Look, I asked for a SHA512 hash, please try again"
    exit 1
fi
treeRootHash="$1"
outputFilename="$2"

fmrk="$AK_WORKDIR/fmrk"
ftr="$AK_WORKDIR/ftr"

# This would be a kind of bootstrap for remote downloads
#
#remoteMrk="http://z.kaotisk-hund.com:8610/mrk"
#remoteTr="http://z.kaotisk-hund.com:8610/tr"
#
pwd>.pwd

dirWeWere=$(cat .pwd)

# Enter temp folder
TEMPASSIN="$(ak-tempassin)"
cd $TEMPASSIN

findDepth(){
    currentNode="$1"
    pathToNode="$fmrk/$(ak-sm-hash-to-path --path $currentNode)"
    if [ -f $pathToNode ] && [ "$(du -b $pathToNode | awk '{print $1}')" == "258" ]
    then
        fileHead="$(head -n 1 $pathToNode)"
        counter="$(expr $counter + 1)"
        findDepth "$fileHead"
    elif [ ! -f $pathToNode ]
    then
        printf "%s" "$counter" > depth
    else
        exit 111
# Try to download stuff
#        wget -s $remoteMrk/$currentNode -O $fmrk/$currentNode
#        if [ "$?" -ne 0 ]
#        then
#            exit 111
#        fi
#        findDepth "$currentNode"
    fi
}

currentNode="$treeRootHash"
counter=0

printf "%s" "$currentNode" > workspace.0
findDepth "$currentNode"
depth="$(expr `cat depth` + 1)"
counter="0"
printf "%s" "$depth"
if [ -f output ]
then
    rm output
fi
touch output

while [ "$counter" != "$depth" ]
do
    printf "Entering loop... %s %s\n" "$counter" "$depth"
    while IFS="" read -r p || [ -n "$p" ]
    do
        nextLevel="$(expr $counter + 1)"
        if [ "$p" == "" ]
        then
            echo hi
        else
            expectedPath="$fmrk/$(ak-sm-hash-to-path --path $p)"
            if [ -f $expectedPath ]
            then
                if [ "$(head -n 1 $expectedPath)" == "$(tail -n 1 $expectedPath)" ]
                then
                    head -n 1 $expectedPath >> workspace.$nextLevel
                else
                    cat $expectedPath >> workspace.$nextLevel
                fi
            elif [ -f $ftr/$p ]
            then
                cat $ftr/$p >> output
            fi
        fi
    done < workspace.$counter
    counter="$(expr $counter + 1)"
done

base64 -d output > $dirWeWere/$outputFilename
rm $dirWeWere/.pwd
printf "Recreation of $treeRootHash as $outputFilename succeeded!"