#!/bin/sh
set -eu

MAILDIR=$HOME/.maildir

SQLITE=/usr/bin/sqlite3
RESUBMIT=$HOME/.etc/mailfilter/bin/resubmit

DELAYED_QUEUE_DB=$HOME/.var/procmail/delayed-queue.sqlite

QUERY='select * from messages where release_ts < strftime("%s", "now")'

$SQLITE -list -separator ' ' $DELAYED_QUEUE_DB "$QUERY" \
  | while read msgid basefile ts; do

    file="$MAILDIR/$basefile"
    files="$file ${file}:2,"

    basename="${file##*/}"
    dirname="${file%/*}"
    case "${dirname##*/}" in
      cur)
        files="$files ${file}:2,S"
        file="${dirname%/cur}/new/$basename"
        files="$files $file ${file}:2,"
        ;;
      new)
        file="${dirname%/new}/cur/$basename"
        files="$files ${file}:2, ${file}:2,S"
        ;;
    esac

    found=0
    for file in $files; do
      if [ -f "$file" ]; then
        $RESUBMIT "$file"
        echo "I: resubmitted $msgid"
        found=1
        break
      fi
    done

    $SQLITE $DELAYED_QUEUE_DB "delete from messages where msgid = '$msgid'"

    if [ $found -eq 0 ]; then
      echo "E: message $msgid not found in $basefile" >&2
    fi

done