#!/bin/zsh
#
alias note="TAKE_NOTE_OR_MEMO note"
alias memo="TAKE_NOTE_OR_MEMO memo"
alias memos="TAKE_NOTE_OR_MEMO viewmemos"

function TAKE_NOTE_OR_MEMO() {
	local FILENAME="$2";

	local MEMO_DIR="$HOME/.memos";
	local FILETYPE='md';

	local DIR="";
	local TITLE="$FILENAME";
	local ADD_EDITOR_ARGS=0;
	local EDITOR_ARGS='';

	local ERROR_CODE=0;

	case $1 in

		viewmemos )
			[ -d $MEMO_DIR ] || {
				echo "unable to find any memos; try to make a memo first";
				ERROR_CODE=1;
			}

			DIR="$MEMO_DIR"
			FILENAME='';
			;;

		memo )
			[ -d $MEMO_DIR ] || {
				mkdir $MEMO_DIR || { 
					echo "unable to find or create memo directory '$MEMO_DIR'"
					ERROR_CODE=2;
				}
			}
			DIR="$MEMO_DIR"

			[ $FILENAME ] && FILENAME="$FILENAME.$FILETYPE"\
				|| {
					for i in {001..999}; do
						TITLE="$i";
						FILENAME="$i.$FILETYPE";
						[ ! -f "$MEMO_DIR/$i.$FILETYPE" ] && break;
					done
				}

			ADD_EDITOR_ARGS=1;
			;;

		note )
			DIR="."

			[ $FILENAME ] || {
				FILENAME="$(date -I)-notes";
				TITLE='Notes';
				ADD_EDITOR_ARGS=1;
			}

			FILENAME="$FILENAME.$FILETYPE"
			;;

		* )
			echo "please specify whether this is an in-place 'note' or a general 'memo'";
			ERROR_CODE=3;
			;;
	esac

	[ $ERROR_CODE -ne 0 ] && {
		echo 'syntax: `TAKE_NOTE_OR_MEMO [ note | memo | viewmemos ] [ filename ]`';
			return $ERROR_CODE;
		}

	[ $ADD_EDITOR_ARGS -ne 0 ] && [ ! -f "$DIR/$FILENAME" ] && {
		DATESTRING="$(date '+%A, %B %-d, %Y')"
		[ $EDITOR == 'vim' ] && EDITOR_ARGS='-c "normal! i# $TITLE :: $DATESTRING"';
	}

	eval "$EDITOR $EDITOR_ARGS $DIR/$FILENAME";
}