#!/usr/bin/python

import re
import subprocess
import sys

filename = sys.argv[1]

f = open(filename, 'r+')
msg = list(f)

del_re = re.compile(r'^((\s*)|(#.*))$')
header_re = re.compile(r'([\w-]+):\s*(.*)')
new_ticket_re = re.compile(r'^((?:RT-)?ticket:)\s*(new)', re.IGNORECASE)

while len(msg) > 0 and del_re.match(msg[-1]):
    del msg[-1]

newmsg = []

while len(msg) > 0:
    if not header_re.match(msg[-1]):
        break
    line = msg.pop()
    m = new_ticket_re.match(line)
    if not m:
        newmsg.append(line)
    else:
        p = subprocess.Popen(['ssh', 'krbdev.mit.edu', 'krb5-rt-id'],
                             stdout=subprocess.PIPE, stderr=subprocess.PIPE,
                             universal_newlines=True)
        ticket, err = p.communicate()
        newticket = m.expand(r'\1 ' + ticket.rstrip() + r' (\2)\n')
        newmsg.append(newticket)

# Pulling headers from the end reverses the order, so undo that.
msg += reversed(newmsg)

f.seek(0)
f.truncate()
f.writelines(msg)