"""Run: python recalculate-window-1242.py draws-1222-1242.csv
Fixed archive, not a prediction or a live-data client. Python standard library.
"""
import csv
import sys
from collections import Counter
from statistics import mean, median

def calculate(path):
    with open(path, encoding='utf-8-sig', newline='') as stream:
        rows=list(csv.DictReader(stream))
    assert [int(r['round']) for r in rows]==list(range(1222,1243)), 'Missing or reordered rounds'
    for r in rows:
        r['numbers']=[int(r['n'+str(i)]) for i in range(1,7)]
        assert len(set(r['numbers']))==6 and all(1<=n<=45 for n in r['numbers'])
        assert int(r['bonus']) not in r['numbers'] and 1<=int(r['bonus'])<=45
    result={}
    for lo,hi in ((1222,1241),(1223,1242),(1223,1232),(1233,1242)):
        window=[r for r in rows if lo<=int(r['round'])<=hi]
        sums=[sum(r['numbers']) for r in window]
        result[f'{lo}-{hi}']={'n':len(window),'sum':sum(sums),'mean':mean(sums),'median':median(sums),'min':min(sums),'max':max(sums),'odd_counts':dict(sorted(Counter(sum(n%2 for n in r['numbers']) for r in window).items()))}
    assert result['1223-1242']['sum']==2800
    assert result['1222-1241']['sum']==2823
    assert set(rows[-1]['numbers']) & set(rows[-2]['numbers'])=={16}
    assert (sum(rows[-1]['numbers'])-sum(rows[0]['numbers']))/20==-1.15
    return result

if __name__=='__main__':
    for window, values in calculate(sys.argv[1]).items():print(window,values)
