#!/bin/bash

set -efu

#############
### Setup ###
#############
echo "[0]"
rcfile=$(mktemp /tmp/procmailrc-XXXX)
[ -f "${rcfile}" ]
trap "rm -f '${rcfile}'" EXIT

mbox=$(mktemp /tmp/mbox-XXXX)
[ -f "${mbox}" ]
trap "rm -f '${mbox}'" EXIT

maildir=$(mktemp -d /tmp/Mail-XXXX)
[ -d "${maildir}" ]
trap "rm -rf '${maildir}'" EXIT


####################################
### Test basic copying of emails ###
####################################
echo "[1]"
rm -f "${maildir}/*"
cat > "${rcfile}" <<EOF
LOGFILE=/tmp/procmail.log
VERBOSE=on
MAILDIR=${maildir}

:0 c
backup

:0
inbox
EOF

procmail -m "${rcfile}" <<EOF
From xyz at test.org  Tue Jan 08 01:02:03 2024
From: xyz at test.org
Date: Mon, 01 Jan 2024 01:02:03 -0700
Subject: Test email

Body text

EOF
echo $?

ls -l "${maildir}"
grep "Subject: Test email" "${maildir}/backup"
grep "Subject: Test email" "${maildir}/inbox"
echo


######################################
### Test basic filtering of emails ###
######################################
echo "[2]"
rm -f "${maildir}/*"
cat > "${rcfile}" <<EOF
LOGFILE=/tmp/procmail.log
VERBOSE=on
MAILDIR=${maildir}

:0:
* ^X-Spam-Flag: YES
spam

:0
ham
EOF

cat <<EOF | procmail -m "${rcfile}"
From xyz at test.org  Tue Jan 08 01:02:03 2024
From: xyz at test.org
Date: Mon, 01 Jan 2024 01:02:03 -0700
Subject: Test email 1

Body text
EOF

cat <<EOF | procmail -m "${rcfile}"
From xyz at test.org  Tue Jan 08 01:02:03 2024
From: xyz at test.org
Date: Mon, 01 Jan 2024 01:02:03 -0700
X-Spam-Flag: YES
Subject: spam message

Foobar
EOF

ls -l "${maildir}"
grep "Subject: Test email 1" "${maildir}/ham"
grep -v "Subject: spam message" "${maildir}/ham"
grep "Subject: spam message" "${maildir}/spam"
echo


###############################
### Test fixing up subjects ###
###############################
echo "[3]"
rm -f "${maildir}/*"
echo "[3.1]"
cat > "${rcfile}" <<EOF
LOGFILE=/tmp/procmail.log
VERBOSE=on
MAILDIR=${maildir}

:0
* Subject: .*email
{
  NEW_SUBJECT=\`formail -zx "Subject:" | expand | sed -e 's/email/message/'\`

  :0 fwh
  | formail -I "Subject: \$NEW_SUBJECT"
}

:0
inbox
EOF
echo
cat ${rcfile}
echo

echo "[3.2]"
procmail -m "${rcfile}" <<EOF
From xyz at test.org  Tue Jan 08 01:02:03 2024
From: xyz at test.org
Date: Mon, 01 Jan 2024 01:02:03 -0700
Subject: Test email

Body text
EOF
echo $?
echo "[3.3]"

ls -l "${maildir}"
grep -v "Subject: Test email" "${maildir}/inbox"
grep "Subject: Test message" "${maildir}/inbox"
echo
