#!/bin/zsh
DEPENDENCIES+=()
REQUIRED_ENV+=()

use office/latex

CHECK_ENVIRONMENT
#####################################################################

TEMPLATE_DIR="${0:a:h}/templates"

CREATE_NEW_LATEX_DOCUMENT_FROM_TEMPLATE() {
	local DOCUMENT_DIR="$EXECUTION_DIR"
	local TEMPLATE=$(GET_TEMPLATES | FZF 'select a template')
	[ ! $TEMPLATE ] && ABORT
	SUCCESS "selected template '$TEMPLATE'"

	INPUT DOC_TITLE 'document title' || ABORT

	local DOCUMENT_FILE="$DOCUMENT_DIR/$(SLUGIFY_TITLE).tex"
	[ -f "$DOCUMENT_FILE" ] && FAIL 1 "'$(basename $DOCUMENT_FILE)' already exists"

	INPUT DOC_ID    'document id/subtitle'
	INPUT AUTHOR    'author name'
	INPUT AUTHOR_ID 'author id/title'

	{
		PRINT_TITLE_INFO 
		cat "$TEMPLATE_DIR/$TEMPLATE/template.tex"
	} > "$DOCUMENT_FILE"
	cp "$TEMPLATE_DIR/gitignore" "$DOCUMENT_DIR/.gitignore"
	for FILE in $(find "$TEMPLATE_DIR/$TEMPLATE" -type f | grep -v '/template.tex$')
	do
		cp "$FILE" "$DOCUMENT_DIR/" || return 2
	done
	[[ ! $TEMPLATE =~ ^basic$ ]] \
		&& mkdir "$DOCUMENT_DIR/sections" "$DOCUMENT_DIR/graphics"

	SUCCESS "finished generating '$(basename $DOCUMENT_FILE)' from '$TEMPLATE'"
}

GET_TEMPLATES() {
	find "$TEMPLATE_DIR" -type d | sed "s^$TEMPLATE_DIR/*^^; /^$/d"
}

PRINT_TITLE_INFO() {
	local DATESTRING=$(date '+%B %_d, %Y' | sed 's/ \{1,\}/ /g')
	sed "
		s^LATEX-DOC-TITLE^$DOC_TITLE^
		s^LATEX-DOC-DATE^$DATESTRING^
		s^LATEX-DOC-ID^$DOC_ID^
		s^LATEX-AUTHOR-NAME^$AUTHOR^
		s^LATEX-AUTHOR-ID^$AUTHOR_ID^
	" "$TEMPLATE_DIR/main.tex"
}

SLUGIFY_TITLE() {
	echo $DOC_TITLE | sed "s^['\"\\/,\!@#\$%^&*()]*^^g; s^\s\+^-^g;"
}

#####################################################################
CREATE_NEW_LATEX_DOCUMENT_FROM_TEMPLATE $@