#!/bin/bash

source "${BASH_SOURCE%/*}/resources/functions.sh"

ELEMENTAL_FILE_LOCATION="app/src/Elements"
TEMPLATE_FILE_LOCATION="app/templates/Fastrack/Elements"
CSS_FILE_LOCATION="app/css/elements"
JS_FILE_LOCATION="app/javascript/elements"

help_message() {
	echo "$(tput setaf 2)parsnip - Elemental generator$(tput sgr0)

USAGE
parsnip [OPTIONS]
    $(tput setaf 2)--name   (-n)$(tput sgr0)    Element name using pascal case e.g. MyModule (required)
    $(tput setaf 2)--delete (-d)$(tput sgr0)    Deletes the element
    $(tput setaf 2)--help   (-h)$(tput sgr0)    Shows this message

parsnip will:
    * Create PHP file in -------- $ELEMENTAL_FILE_LOCATION
    * Create template file in --- $TEMPLATE_FILE_LOCATION
    * Create CSS file in -------- $CSS_FILE_LOCATION
    * Create JavaScript file in - $JS_FILE_LOCATION"
}

NAME=""
DELETE=0


while [[ "$1" == -* ]]; do
	opt=$1
	shift
	case "$opt" in
		--name | -n)
			NAME="$1";
			shift ;;
		--delete | -d)
			DELETE=1
			;;
		--help | -h)
			help_message && exit 0
			;;
		*)
			error_msg && echo >&2 "Unrecognized option $opt." && error
			;;
	esac
done

[ -z "$NAME" ] && error_msg && echo "No name specified" && error

PASCAL_CASE="$NAME"

KEBAB_CASE=$(echo "${PASCAL_CASE}" \
	| sed 's/\(.\)\([A-Z]\)/\1-\2/g' \
	| tr '[:upper:]' '[:lower:]')

HUMAN_READABLE=$(echo "${PASCAL_CASE}" \
	| sed 's/\(.\)\([A-Z]\)/\1 \2/g' \
	| tr '[:upper:]' '[:lower:]')
HUMAN_READABLE="$(tr '[:lower:]' '[:upper:]' <<< "${HUMAN_READABLE:0:1}")${HUMAN_READABLE:1}"


info_msg && echo "CSS selector: ${KEBAB_CASE}"
info_msg && echo "Class name:   ${PASCAL_CASE}"
info_msg && echo "Description:  ${HUMAN_READABLE}"

ELEMENTAL_FILE="${PASCAL_CASE}Element.php"
TEMPLATE_FILE="${PASCAL_CASE}Element.ss"
CSS_FILE="_${KEBAB_CASE}.scss"
JS_FILE="${KEBAB_CASE}.js"

ELEMENTAL_PATH="${ELEMENTAL_FILE_LOCATION}/${ELEMENTAL_FILE}"
TEMPLATE_PATH="${TEMPLATE_FILE_LOCATION}/${TEMPLATE_FILE}"
CSS_PATH="${CSS_FILE_LOCATION}/${CSS_FILE}"
JS_PATH="${JS_FILE_LOCATION}/${JS_FILE}"

if [ $DELETE -eq 1 ]
then
	info_msg && echo "Deleting files"
	rm "${ELEMENTAL_PATH}"
	rm "${TEMPLATE_PATH}"
	rm "${CSS_PATH}"
	rm "${JS_PATH}"
	exit 0
fi

info_msg && echo "Copying files..."
cp ${BASH_SOURCE%/*}/resources/templates/elemental.tpl  "/tmp/${ELEMENTAL_FILE}"
cp ${BASH_SOURCE%/*}/resources/templates/template.tpl   "/tmp/${TEMPLATE_FILE}"
cp ${BASH_SOURCE%/*}/resources/templates/css.tpl        "/tmp/${CSS_FILE}"
cp ${BASH_SOURCE%/*}/resources/templates/javascript.tpl "/tmp/${JS_FILE}"

info_msg && echo "Parsing files..."
FILES=("/tmp/${ELEMENTAL_FILE}" "/tmp/${TEMPLATE_FILE}" "/tmp/${CSS_FILE}" "/tmp/${JS_FILE}")
for FILE in "${FILES[@]}";
do
	sed -i "s/\${class}/${PASCAL_CASE}/g" "${FILE}"
	sed -i "s/\${selector}/${KEBAB_CASE}/g" "${FILE}"
	sed -i "s/\${human}/${HUMAN_READABLE}/g" "${FILE}"
done

cp "/tmp/${ELEMENTAL_FILE}" "${ELEMENTAL_PATH}"
cp "/tmp/${TEMPLATE_FILE}" "${TEMPLATE_PATH}"
cp "/tmp/${CSS_FILE}" "${CSS_PATH}"
cp "/tmp/${JS_FILE}" "${JS_PATH}"

info_msg && echo "Complete"
