#!/bin/bash
# Written by Jerry Cooperstein
# Updated by Behan Webster

set -e
THISDIR=$(pwd)
COURSE=$(basename $(pwd))

WDIR="$THISDIR/$COURSE-LABS"
CDIR="$WDIR/$COURSE"

TEST=${TEST:+echo}

[[ -z $DEL ]] || $TEST rm -rf "$WDIR"
$TEST mkdir -p "$CDIR/CHAPS"

################################################################################
get_tex_dirs() {
	for FILE in "$@" ; do
		grep -vE '^%' "$FILE" | grep subimport | sed -re 's|.*\{(.*)\/}\{index\}|\1|;'
	done
}

################################################################################
echo "I: Copying Chapters"
FILES=$(get_tex_dirs "$COURSE.tex" append*tex)
if [[ -n $FILES ]] ; then
	$TEST rsync -ac --delete \
		--exclude='*.bin' --exclude='*.bz2' --exclude='*.gz' --exclude='*.img' \
		--exclude='*.mp4' --exclude='*.tar' --exclude='*.xz' --exclude='*.zip' \
		--exclude='*.iso' \
		--copy-links $FILES "$CDIR/CHAPS"
	$TEST rsync -ac --delete --copy-links common/ "$CDIR/common/"
else
	echo "E: No tex chapters found"
	exit 1
fi

################################################################################
echo "I: Copying other files"
for FILE in Makefile "$COURSE.tex" arch*tex board*tex append*tex language*tex IMAGES LABS ; do
	if [[ -e $FILE ]] ; then
		rm -f "$CDIR/$FILE"
		if [[ $FILE =~ ^.*\.tex$ ]] ; then
			$TEST cp "$FILE" "$CDIR"
		else
			$TEST ln -s "../../$FILE" "$CDIR/$FILE"
		fi
	fi
done

################################################################################
command -v symlinks >/dev/null && $TEST symlinks -r "$CDIR"
cd "$CDIR"
$TEST make -s veryclean
$TEST du -sh "$CDIR"

################################################################################
echo "I: Removing everything other than labs"
remove_chaps() {
	local TEX=$1
	local GREPCMD="grep -e \\chapter{ -e \\lflogo -e \\section{Labs -e \\input{lab"
	#echo GREPCMD = $GREPCMD
	local NUM=1
	for CHAP in $(get_tex_dirs "$TEX") ; do
		local FILE="$CHAP/index.tex"
		local ORIG="$FILE.orig"

		[[ -f "$FILE.orig" ]] || cp "$FILE" "$ORIG"
		$TEST $GREPCMD "$ORIG" > "$FILE"

		# Remove empty chapters
		if grep -q -e '\input{lab}' -e '\input{labs}' "$FILE" ; then
			$TEST sed -iorig -e s/'\\clearpage\\section'/'\\section'/g $CHAP/lab*tex
		else
			$TEST sed -ie "s/^.*${CHAP##*/}.*$/\\\\setcounter{chapter}{$NUM}/" "$TEX"
		fi
		NUM=$((NUM+1))
	done
}
remove_chaps "$COURSE.tex"
remove_chaps append*tex

################################################################################
echo "I: Making PDF"
$TEST make -s veryclean class

################################################################################
echo "I: List PDFs"
for FILE in *.pdf ; do
	$TEST ls -lh "$FILE"
	echo "$FILE: $(pdfinfo $FILE | awk '/Pages/ {print $2}') pages"
done

################################################################################
echo "I: Copy resulting PDF"
$TEST cp -v $COURSE.pdf $THISDIR/$COURSE-labs.pdf
