"""Build ~/data/stats19/daily.csv from the DfT road safety collision file. Run after the seal."""
import collections
import csv
import datetime as dt
import os
import sys
import urllib.request

URL = "https://data.dft.gov.uk/road-accidents-safety-data/dft-road-casualty-statistics-collision-1979-latest-published-year.csv"
DIR = os.path.expanduser("~/data/stats19")
RAW = os.path.join(DIR, "collision.csv")
OUT = os.path.join(DIR, "daily.csv")


def main():
    os.makedirs(DIR, exist_ok=True)
    if not os.path.exists(RAW):
        urllib.request.urlretrieve(URL, RAW)
    allc, fs, bad = collections.Counter(), collections.Counter(), 0
    csv.field_size_limit(sys.maxsize)
    with open(RAW, newline="", encoding="utf-8-sig") as f:
        r = csv.DictReader(f)
        sev = [c for c in r.fieldnames if c.endswith("_severity") and "legacy" not in c][0]
        print("columns", r.fieldnames[:8], "severity", sev)
        for row in r:
            try:
                d = dt.datetime.strptime(row["date"], "%d/%m/%Y").date()
            except ValueError:
                bad += 1
                continue
            allc[d] += 1
            if row[sev] in ("1", "2"):
                fs[d] += 1
    with open(OUT, "w", newline="") as f:
        w = csv.writer(f)
        w.writerow(["date", "collisions", "fatal_serious"])
        d, end = min(allc), max(allc)
        while d <= end:
            w.writerow([d.isoformat(), allc[d], fs[d]])
            d += dt.timedelta(days=1)
    print("days", len(allc), "collisions", sum(allc.values()), "bad dates", bad, min(allc), max(allc))


if __name__ == "__main__":
    main()
