#!/bin/sh
set -eu

USER=${USER:-$LOGNAME}
DOMAIN=${DOMAIN:-$(hostname --fqdn)}

NICE='/usr/bin/nice -20'
NICE=''
MAILFILTER=$HOME/.etc/mailfilter
SA_PREFS="$MAILFILTER/spamassassin/user_prefs"
MAILREAVER="$NICE /usr/share/crm114/mailreaver.crm -u $MAILFILTER/crm114/"
SPAMASSASSIN="$NICE /usr/bin/spamassassin --prefs-file=$SA_PREFS"
SPAMC="$NICE /usr/bin/spamc --log-to-stderr"
SA_REPORT="$SPAMC --reporttype=report"
SA_REVOKE="$SPAMC --reporttype=revoke"
SA_LEARN="$NICE /usr/bin/sa-learn -p $SA_PREFS"
SA_LEARN_HAM="$SPAMC --learntype=ham"
SA_LEARN_SPAM="$SPAMC --learntype=spam"
PRE_CLEANUP="$NICE $MAILFILTER/procmail/pre-spam-cleanup"

HAM=0
SPAM=0
FILE=

for i in "$@"; do
  case "$i" in
    --ham) HAM=1;;
    --spam) SPAM=1;;
    *)
      if [ -n "$FILE" ]; then
        echo "E: input file already specified: $i" >&2
        exit 1
      elif [ -r "$i" ]; then
        FILE="$i"
      else
        echo "E: unknown argument: $i" >&2
        exit 255
      fi
      ;;
  esac
done

case "$HAM/$SPAM" in
  0/0)
    echo "E: you need to specify either --ham or --spam." >&2
    exit 255
    ;;
  1/1)
    echo "E: you cannot specify both --ham and --spam." >&2
    exit 255
    ;;
esac

TMPFILE="$(tempfile -p mailtrainer)"
trap "rm -f $TMPFILE" 1 2 3 4 5 6 7 8 10 11 12 13 14 15

$PRE_CLEANUP < ${FILE:-/dev/stdin} > "$TMPFILE"

cd $HOME/.var/crm114

case "$HAM/$SPAM" in
  1/0)
    echo -n 'Training Spamassassin with ham: ' >&2
    $SA_LEARN_HAM < "$TMPFILE" >&2
    echo -n 'Revoking spam via Spamassassin: ' >&2
    $SA_REVOKE < "$TMPFILE" >&2
#    [ "${CRM114_STATUS:-}" = GOOD ] || {
      echo -n 'Training crm114 with ham: ' >&2
      $MAILREAVER --good < "$TMPFILE" >/dev/null
      echo 'done.' >&2
#    }
    formail -I 'X-Trained-As: ham' < "$TMPFILE"
    ;;
  0/1)
    echo -n 'Training Spamassassin with spam: ' >&2
    $SA_LEARN_SPAM < "$TMPFILE" >&2
    echo -n 'Reporting spam via Spamassassin: ' >&2
    $SA_REPORT < "$TMPFILE" >&2
#    [ "${CRM114_STATUS:-}" = SPAM ] || {
      echo -n 'Training crm114 with spam: ' >&2
      $MAILREAVER --spam < "$TMPFILE" >/dev/null
      echo 'done.' >&2
#    }
    formail -I 'X-Trained-As: spam' < "$TMPFILE"
    ;;
esac

rm -f $TMPFILE
trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15

exit 0