import datetime
import os
import os.path
import re
import sys

# Prints all keyholders for the year to stderr
# and a CSV to stdout

# This is copied from the other Python script. I don't know why tf it says Google Hangouts
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'

if len(sys.argv) < 2:
	print("Usage: get_member_count.py year")
	exit(1)

year = sys.argv[1]
minutes_path = os.path.join(os.path.join(minutes_path, "HISTORY"), f"{year}_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()
members_this_year = set()
keyholders_this_year = set()
for f in files:
    match = re.search(r'^minutes.(\d+)-(\d+)-(\d+)$', f)
    if match is None:
        continue
    # Want ALL OF THEM
	#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', file=sys.stderr)
        print(f, file=sys.stderr)
        #exit() # Don't fail the whole thing :(
        continue # instead
    if not is_exception and len(members_lines) != 1:
        print('Error: wrong number of member lines', file=sys.stderr)
        print(f, file=sys.stderr)
        continue
        #exit()
    keyholders_line = keyholders_lines[0]
    members_line = members_lines[0]
    keyholders = parse_list_string(keyholders_line)
    members = parse_list_string(members_line)
    keyholders_this_year |= set(keyholders)
    members_this_year |= set(members)

combined = keyholders_this_year | members_this_year

print('Numbers for', year, file=sys.stderr)
print('Keyholders: ' + ' '.join(list(keyholders_this_year)), file=sys.stderr)
print('Members: ' + ' '.join(list(members_this_year)), file=sys.stderr)
print('Combined count:', len(combined), file=sys.stderr)
print(file=sys.stderr)

member_count = len(members_this_year)
keyholder_count = len(keyholders_this_year)
total = len(combined)
print(f"{year},{member_count},{keyholder_count},{total}")
