#!/bin/bash
#                       /usr/local/bin/today
# https://crystalfaeries.net/posix/bin/today
# celeste:crystalfaery TODAY 2021-04-07 20:36:55+00:00
# Create today's blog entry file if it does not exist,
# or, with a date argument, file for the specified date.
# With -e (edit) argument or lacking -a (auto) argument:
# then edit the blog entry or prepublish file templated from:
# "${HOME}"/crystalfaeries.net/src/.today.header.txt
# "${HOME}"/crystalfaeries.net/src/.today.readme.txt

let help=11	# 1 less than this line's # in file

false		# AUTO generate today's blog entry if missing
let AUTO=$?	# and EDIT INTERACTIVELY (default action)

cd "${HOME}"/crystalfaeries.net/src/
case $# in
0)	# no options or arguments means we're manually editing today's blog entry:
if [ -s			"${HOME}"/crystalfaeries.net/src/$(date  --rfc-3339=date).fae.txt ]
then
	echo "...editing today's blog entry file" 1>&2
	vi		"${HOME}"/crystalfaeries.net/src/$(date  --rfc-3339=date).fae.txt
	preview		"${HOME}"/crystalfaeries.net/src/$(date  --rfc-3339=date).fae.txt
	exit $?
else
    if [ -s		"${HOME}"/crystalfaeries.net/src/.$(date --rfc-3339=date).fae.txt ]
    then
	echo "...revealing today's blog entry file" 1>&2
	rsync -auvH	"${HOME}"/crystalfaeries.net/src/.$(date --rfc-3339=date).fae.txt	\
			"${HOME}"/crystalfaeries.net/src/$(date  --rfc-3339=date).fae.txt
	delete		"${HOME}"/crystalfaeries.net/src/.$(date --rfc-3339=date).fae.txt
	touch		"${HOME}"/crystalfaeries.net/src/$(date  --rfc-3339=date).fae.txt
	vi		"${HOME}"/crystalfaeries.net/src/$(date  --rfc-3339=date).fae.txt
	preview		"${HOME}"/crystalfaeries.net/src/$(date  --rfc-3339=date).fae.txt
	exit $?
    else
	echo "...creating today's blog entry file" 1>&2
	echo -n "Date:	"								\
			>  "${HOME}"/crystalfaeries.net/src/$(date --rfc-3339=date).fae.txt
	now		>> "${HOME}"/crystalfaeries.net/src/$(date --rfc-3339=date).fae.txt
	echo "Expiry:	$((`date +%s -d "${1}"` + 60*60*24*32))"			\
			>> "${HOME}"/crystalfaeries.net/src/$(date --rfc-3339=date).fae.txt
	cat		   "${HOME}"/crystalfaeries.net/src/.today.header.txt		\
			>> "${HOME}"/crystalfaeries.net/src/$(date --rfc-3339=date).fae.txt
	now -n						    $(date --rfc-3339=date)	\
			>> "${HOME}"/crystalfaeries.net/src/$(date --rfc-3339=date).fae.txt
	events		>> "${HOME}"/crystalfaeries.net/src/$(date --rfc-3339=date).fae.txt
#   echo "Dhammapada:"	>> "${HOME}"/crystalfaeries.net/src/$(date --rfc-3339=date).fae.txt
#/usr/bin/dhamma -b	>> "${HOME}"/crystalfaeries.net/src/$(date --rfc-3339=date).fae.txt
	cat		   "${HOME}"/crystalfaeries.net/src/.today.readme.txt		\
			>> "${HOME}"/crystalfaeries.net/src/$(date --rfc-3339=date).fae.txt
	vi		   "${HOME}"/crystalfaeries.net/src/$(date --rfc-3339=date).fae.txt
	preview		   "${HOME}"/crystalfaeries.net/src/$(date --rfc-3339=date).fae.txt
	exit $?
    fi
fi
;;
*)	# we have an option and/or argument
    case "${1}" in
    -h | --help )
	head -n $help $0
	exit
	;;
    -v | --version )
	head -n 4 $0 | tail -n 1
	exit
	;;
    -a )
	true		# AUTO generate today's blog entry if missing
	let AUTO=$?	# but DO NOT EDIT INTERACTIVELY
	shift		# consume the argument
	;;
    -e )
	false		# AUTO generate today's blog entry if missing
	let AUTO=$?	# and EDIT INTERACTIVELY
	shift		# consume the argument
	;;
    *)	:	# we presume the remainder is a date YYYY-MM-DD
	;;
    esac

	echo	'EXPIRE BEGIN' 2>> "${HOME}"/.chronicle.log 1>&2
	# EXPIRE Articles containing "Expiry:" entry
	for f in $(grep '^Expiry:	' "${HOME}"/crystalfaeries.net/src/*.txt | sed 's/:.*$//')
	do
		if [ $(date +%s) -gt $(grep '^Expiry:	' ${f} | cut -f2-) ]
		then	# this article is beyond its expiry timestamp
			echo "Expired:	${f}"	>>	"${HOME}"/.chronicle.log 2>&1
			delete		${f}	>>	"${HOME}"/.chronicle.log 2>&1
		else	# this article is within its limited lifespan
			echo "Visible:	${f}"	>>	"${HOME}"/.chronicle.log 2>&1
		fi
	done

	# UNLESS THE USER ERRED in article creation, Expiry SHOULD post-date Publish date, RIGHT?
	# So above we only expired already published articles, not Future Publish articles we may now reveal.
	# This creates a minimum exposure of once for any article before it expires, per run of this script with -a.

	echo	'REVEAL BEGIN' 2>> "${HOME}"/.chronicle.log 1>&2
	# NOTE: User may PREVIEW hidden files with /usr/local/bin/preview in "${HOME}"/crystalfaeries.net/fay/
	# User may generate "tomorrow's" blog entry as a hidden file
	# which is not published by chronicle until first run on publish date.
	for f in .20*.fae.txt; do	# YES, CODE BREAKS FOR DATES PAST 2099-12-31 :-)
		  hidden="$(echo ${f}		| sed 's/\.fae\.txt$//')"
		revealed="$(echo ${hidden}	| sed 's/^\.//')"
	    if	[ "${revealed}" < "$(now	| sed 's/\ .*$//')" ]
	    then	# do NOT overwrite the REVEALED file with a later-dated zero-size (deleted) UNrevealed file
		rsync -auvH	"$hidden.fae.txt"	"$revealed.fae.txt"	2>> "${HOME}"/.chronicle.log 1>&2	\
		&& delete	"$hidden.fae.txt"				2>> "${HOME}"/.chronicle.log 1>&2	\
		&& touch				"$revealed.fae.txt"	2>> "${HOME}"/.chronicle.log 1>&2	\
		&& touch	.						2>> "${HOME}"/.chronicle.log 1>&2	# source was updated
	    else	# display next UNrevealed future file
		    preview "${hidden}.fae.txt"					2>> "${HOME}"/.chronicle.log 1>&2 <	/dev/null &
		    break # out of loop...
	    fi
	done

	if [	-w			   "${HOME}"/crystalfaeries.net/src/$(date --rfc-3339=date -d "${1}").fae.txt ]
	then	# file already published
	    if [ $AUTO -ne 0 ]
	    then
		echo "...editing existing blog entry file for ${1}" 1>&2
		vi			   "${HOME}"/crystalfaeries.net/src/$(date --rfc-3339=date -d "${1}").fae.txt
		preview			   "${HOME}"/crystalfaeries.net/src/$(date --rfc-3339=date -d "${1}").fae.txt
		exit	$?
	    fi
	fi
	if [	-w			   "${HOME}"/crystalfaeries.net/src/.$(date --rfc-3339=date -d "${1}").fae.txt ]
	then	# prepublish file already exists
	    if [ $AUTO -ne 0 ]
	    then
		echo "...editing existing blog PrePublish file for ${1}" 1>&2
		vi			   "${HOME}"/crystalfaeries.net/src/.$(date --rfc-3339=date -d "${1}").fae.txt
		preview			   "${HOME}"/crystalfaeries.net/src/.$(date --rfc-3339=date -d "${1}").fae.txt
		exit	$?
	    fi
	else	# file does not already exist
		echo "...creating blog PrePublish file for ${1}" 1>&2
		echo -n "Date:	"	>  "${HOME}"/crystalfaeries.net/src/.$(date --rfc-3339=date -d "${1}").fae.txt	\
					|| exit $? # bad date: ${1}
		date -u --rfc-3339=seconds -d "${1}"	| sed 's/00:00:00/10:00:00/'					\
	 				>> "${HOME}"/crystalfaeries.net/src/.$(date --rfc-3339=date -d "${1}").fae.txt
		echo "Expiry:	$((`date +%s -d "${1}"` + 60*60*24*32))"						\
					>> "${HOME}"/crystalfaeries.net/src/.$(date --rfc-3339=date -d "${1}").fae.txt
			cat		   "${HOME}"/crystalfaeries.net/src/.today.header.txt				\
					>> "${HOME}"/crystalfaeries.net/src/.$(date --rfc-3339=date -d "${1}").fae.txt
			now  -n "${1}"	>> "${HOME}"/crystalfaeries.net/src/.$(date --rfc-3339=date -d "${1}").fae.txt
			events  "${1}"	>> "${HOME}"/crystalfaeries.net/src/.$(date --rfc-3339=date -d "${1}").fae.txt
			cat		   "${HOME}"/crystalfaeries.net/src/.today.readme.txt				\
					>> "${HOME}"/crystalfaeries.net/src/.$(date --rfc-3339=date -d "${1}").fae.txt
	    if [ $AUTO -ne 0 ]
	    then
		vi			   "${HOME}"/crystalfaeries.net/src/.$(date --rfc-3339=date -d "${1}").fae.txt
		preview			   "${HOME}"/crystalfaeries.net/src/.$(date --rfc-3339=date -d "${1}").fae.txt
		exit	$?
	    fi
	fi
;;
esac
exit	$?
# Alphabetical Filing of Blog Articles by Date within 1971:
0 -> 1971/00/01 10:00:00
1 -> 1971/00/01 11:00:00
2 -> 1971/00/01 12:00:00
3 -> 1971/00/01 13:00:00
4 -> 1971/00/01 14:00:00
5 -> 1971/00/01 15:00:00
6 -> 1971/00/01 16:00:00
7 -> 1971/00/01 17:00:00
8 -> 1971/00/01 18:00:00
9 -> 1971/00/01 19:00:00
a -> 1971/01/01 10:00:00
b -> 1971/01/01 10:30:00
c -> 1971/02/01 10:00:00
d -> 1971/02/01 10:30:00
e -> 1971/03/01 10:00:00
f -> 1971/03/01 10:30:00
g -> 1971/04/01 10:00:00
h -> 1971/04/01 10:30:00
i -> 1971/05/01 10:00:00
j -> 1971/05/01 10:30:00
k -> 1971/06/01 10:00:00
l -> 1971/06/01 10:30:00
m -> 1971/07/01 10:00:00
n -> 1971/07/01 10:30:00
o -> 1971/08/01 10:00:00
p -> 1971/08/01 10:30:00
q -> 1971/09/01 10:00:00
r -> 1971/09/01 10:30:00
s -> 1971/10/01 10:00:00
t -> 1971/10/01 10:30:00
u -> 1971/11/01 10:00:00
v -> 1971/11/01 10:20:00
w -> 1971/11/01 10:40:00
x -> 1971/12/01 10:00:00
y -> 1971/12/01 10:20:00
z -> 1971/12/01 10:40:00
