#!/usr/bin/env python3

import glob
import email
import quopri

POSTSCRIPT = """
# NB: This patch was reverse-engineered from:
#  https://github.com/ThomasDickey/ncurses-snapshots
#  http://lists.gnu.org/archive/html/bug-ncurses/
# Patch hunks should be accurate, though file and hunk metadata is incomplete
# ------------------------------------------------------------------------------
"""

def get_message_body(filename):
    with open(filename) as f:
        lines = f.read().split('\n')

    boundary = lines[1]

    in_body = False
    in_payload = False

    boundaries = [i for i, line in enumerate(lines) if line == boundary]
    msg = email.message_from_string('\n'.join(lines[boundaries[0]+1:boundaries[1]-1]))

    decoded = quopri.decodestring(msg.get_payload())
    return decoded

def transform_msg(msg):
    lines = msg.decode('utf8').split('\n')
    start = [i for i, line in enumerate(lines) if line.startswith(' ncurses 6.2 - patch')][0]
    end = [i for i, line in enumerate(lines) if line.endswith('-' * 75)][-1] + 1
    msg = '\n'.join(['#' + line for line in lines[start:end]])
    return msg

def save_header(msg):
    lines = msg.split('\n')
    # print(msg + POSTSCRIPT)
    date = lines[0].split(' ')[5]
    # print(date)
    with open('{}.hdr'.format(date), 'w') as f:
        f.write(msg)
        f.write(POSTSCRIPT)

def main():
    for filename in glob.glob('*.msg'):
        msg = get_message_body(filename)
        msg = transform_msg(msg)
        save_header(msg)

if __name__ == '__main__':
    main()
