#!/bin/sh
set -eu

ME="${0##*/}"

about()
{
  echo "$ME -- resubmit messages to the mail filter"
  echo "Copyright © martin f. krafft <madduck@madduck.net>"
  echo "Released under the terms of the Artistic Licence 2.0"
}

usage()
{
  echo "Usage: $ME [options] <Maildir> [<Maildir> ...]"
  echo
  echo "Valid options are:"
  cat <<-_eof | column -s\& -t
	-V|--version & show version information.
	-h|--help & show this output.
	-l|--list & process the argument list (even if empty), never stdin
	-r|--deliver-read & mark messages read on delivery
	_eof
}

SHORTOPTS=Vhlr
LONGOPTS=version,help,list,deliver-read

list=0
mark_read=0
files=

for opt in $(getopt -n $ME -o $SHORTOPTS -l $LONGOPTS -u -- "$@"); do
  case "$opt" in
    -V|--version) about; exit 0;;
    -h|--help) about; echo; usage; exit 0;;
    -l|--list) list=1;;
    -r|--deliver-read) mark_read=1;;
    --) :;;
    *)
      if [ -f "$opt" ] && [ -r "$opt" ]; then
        files="$files $opt"
      else
        echo "E: unknown argument: $opt" >&2
        exit 1
      fi
      ;;
  esac
done

PROCMAIL=$HOME/.etc/mailfilter/procmail/procmailrc

if [ "$mark_read" -eq 1 ]; then
  PROCMAIL="$PROCMAIL DELIVER_READ=1"
fi

# execute the date -R only during the eval, not immediately
FILTER='/usr/bin/formail -I"X-Resubmitted: $(date -R)"'

if [ -z "${files:-}" ] && [ $list -eq 0 ]; then
  eval $FILTER | exec $PROCMAIL
else
  for f in $files; do
    eval $FILTER < "$f" | $PROCMAIL && rm -f "$f"
  done
fi

exit 0