#!/bin/bash
optstring="o:"
declare -i abort=0

# TODO: Check for dependencies pv and stat.

while getopts ${optstring} args; do
	case $args in
		o) output_file=${OPTARG} ;;
		:) echo "Output file required." ;;
	esac
done
shift $((OPTIND-1))

echo "Concatenating files..."
declare -i total_size=0
for fname in "$@"; do
	if [ ! -e "$fname" ]; then
		abort=1
		echo "${fname} does not exist."
	elif [ -d "$fname" ]; then
		abort=1
		echo "${fname} is a directory."
	else
		current_file_size=$(stat -c%s "$fname")
		total_size=$((total_size+current_file_size))
		# TODO: Use something more legible than bytes.
		echo "Adding ${fname} at ${total_size}b."
	fi
done

if [ $abort -eq 0 ]; then
	cat "$@" | pv -epts "$total_size" > "$output_file"
	echo "Done!"
else
	echo "Errors occurred, concatenation aborted."
fi
