#!/bin/bash
#
# The concept is simple
#
# 1. For a given file we split in 1MB files inside a temporary directory
#
# 2. We then create a map file, containing the resulted files and their sha512sum
#
# 3. We move the files to our $CHKDIR named after their checksums
#
# We ultimately want to be seeding the file so
#
# 4. We append the checksum of the original file with its name into the map file
#
# 5. We rename the map file after its checksum and move it to maps directory
#
# 6. We are done!
#

# Uncomment next line if you want to debug
# set -xe
PROGRAM="$(basename $0)"

if [ ! -f "$1" ]
then
	echo "ERROR File not found"
	exit 1
else
	FILE="$1"
fi

# The directory where the chunked data will be living at
CHKDIR="$AK_WORKDIR/ftr/"
# The directory for the map files so we can reconstruct the file
FILEMAPSDIR="$AK_WORKDIR/fmp/"
# A temporary root dir to work on
TEMPORARYDIR="/tmp/tltmp"
# A subdir to split the files there
TECHDIR="/tmp/tltmp/chks/"
# A pin point to return from where we came from
CURRENTDIR="$(pwd)/"

# Our snippet for logging debug info
source $AK_LIBDIR/_ak_log

# Checking directories and create them if necessary

# TECHDIR
if [ ! -d "$TECHDIR" ]
then
	mkdir -p "$TECHDIR"
	if [ "$?" == 0 ]
	then
		logit "INFO" "Folder $TECHDIR created!"
	else
		logit "ERROR" "Problem occured while creating $TECHDIR"
		echo "ERROR Can't create $TECHDIR"
		exit 1
	fi
else
	logit "INFO" "Temp dir found"
fi

# FILEMAPSDIR
if [ ! -d "$FILEMAPSDIR" ]
then
	mkdir -p "$FILEMAPSDIR"
	if [ "$?" == 0 ]
	then
		logit "INFO" "Folder $FILEMAPSDIR created!"
	else
		logit "ERROR" "Problem occured while creating $FILEMAPSDIR"
		echo "ERROR Can't create $FILEMAPSDIR"
		exit 1
	fi
else
	logit "INFO" "Mapsdir found"
fi

# CHKDIR
if [ ! -d "$CHKDIR" ]
then
	mkdir -p "$CHKDIR"
	if [ "$?" == 0 ]
	then
		logit "INFO" "Folder $CHKDIR created!"
	else
		logit "ERROR" "Problem occured while creating $CHKDIR"
		echo "ERROR Can't create $CHKDIR"
		exit 1
	fi
else
	logit "INFO" "Workdir found"
fi

# Uncomment next line in case you want to debug the resulting script as well
# echo 'set -xe' > $TEMPORARYDIR/cmd_queue.sh

# We get the SHA512 hash for the $FILE given
CHECKSUM=$(sha512sum "$FILE"|awk '{print $1}')

# We split the file into 1048576 bytes and output the chunks into TECHDIR
split -b 1048576 --additional-suffix ".chk" -d "$FILE" "$TECHDIR$(basename "$FILE")-"

# We go over there...
cd $TECHDIR

# We get every chunks' SHA512 and we craft a script to rename the chunks and
# move them to CHKDIR
sha512sum  * > $TEMPORARYDIR/map; while IFS="" read -r p || [ -n "$p" ]
do
	echo $p | awk '{print "mv " $2 " '$CHKDIR'" $1}' >> $TEMPORARYDIR/cmd_queue.sh
done < $TEMPORARYDIR/map

# We run the crafted script
sh $TEMPORARYDIR/cmd_queue.sh

# and we delete it
rm $TEMPORARYDIR/cmd_queue.sh

# We inform the map about the original $FILE name and SHA512
echo "$CHECKSUM  $(basename "$FILE")" >> $TEMPORARYDIR/map

# We get the SHA512 hash of the resulted map file
MAPFILEHASH="$(sha512sum $TEMPORARYDIR/map | awk '{ print $1 }')"

# and we rename it with it and move it to FILEMAPSDIR
`sha512sum $TEMPORARYDIR/map | awk '{print "mv " $2 " '$FILEMAPSDIR'" $1}'`

# We remove the TEMPORARYDIR
rm -rf $TEMPORARYDIR

# and print the MAPFILEHASH
echo "$MAPFILEHASH"