import datetime
import os
import os.path
import re

# vacations aside, this should be 30
ACTIVE_WINDOW = 30

def parse_list_string(s):
    l = s[s.find(':') + 1:].replace(',', '').replace('|', ' ').replace('(Google Hangouts)!', '').replace('Hangouts:', '').split()
    if len(l) == 1 and l[0] == '\'()':
        return []
    else:
        return l

minutes_path = '/afs/sipb.mit.edu/admin/minutes'

files = [f for f in os.listdir(minutes_path) if os.path.isfile(os.path.join(minutes_path, f))]

reference_date = datetime.datetime.now().date()
active_members = set()
active_keyholders = set()
for f in files:
    match = re.search(r'^minutes.(\d+)-(\d+)-(\d+)$', f)
    if match is None:
        continue
    if (reference_date - datetime.date(int(match.group(1)), int(match.group(2)), int(match.group(3)))).days > ACTIVE_WINDOW:
        continue
    with open(os.path.join(minutes_path, f)) as fh:
        lines = fh.readlines()
    keyholders_lines = [l for l in lines if 'Student keyholders:' in l or 'Voting members:' in l]
    members_lines = [l for l in lines if 'Members:' in l or 'Prospectives:' in l]
    is_exception = f == 'minutes.2017-10-02'
    if not is_exception and len(keyholders_lines) != 1:
        print('Error: wrong number of keyholder lines')
        print(f)
        exit()
    if not is_exception and len(members_lines) != 1:
        print('Error: wrong number of member lines')
        print(f)
        exit()
    keyholders_line = keyholders_lines[0]
    members_line = members_lines[0]
    keyholders = parse_list_string(keyholders_line)
    members = parse_list_string(members_line)
    active_keyholders |= set(keyholders)
    active_members |= set(members)

print('Active keyholders: ' + ' '.join(list(active_keyholders)))
print('Active members: ' + ' '.join(list(active_members)))
