"""Pull every middle-housing building permit since 2015 from the City of Bellingham permits layer.

Output: feasibility/raw/mm_permits_2015plus.json
"""
import json, urllib.request, urllib.parse, datetime
B = "https://maps.cob.org/arcgis3/rest/services/Maps/Permits/MapServer/0/query"
MM = ["AADU","ADU","DADU","COTTAGE (ITK)","DUPLEX","DUPLEX (ITK)","TRIPLEX","TRIPLEX (ITK)","FOURPLEX","FIVEPLEX","SIXPLEX",
      "GARDEN COURT (ITK)","SHARED COURT (ITK)","SFR (ATTACHED)","SFR W/ AADU","SFR W/  AADU","SMALL LOT (ITK)","SMALL LOT (ITK) W/ AADU",
      "TOWNHOUSE","TOWNHOUSE (ITK)","TOWNHOUSE W/AADU (ITK)"]
where = ("APPLIED >= DATE '2015-01-01' AND PERMIT_CATEGORY='BUILDING' AND (Housing_Type IN (%s) OR PermitSubType='ADU' "
         "OR PermitType='NEW CONSTRUCTION TOWNHOME')") % ",".join("'%s'" % t for t in MM)
rows, off = [], 0
while True:
    q = urllib.parse.urlencode({"where": where, "outFields": "*", "returnGeometry": "true", "outSR": "4326", "f": "json",
                                "resultOffset": off, "resultRecordCount": 1000, "orderByFields": "APPLIED DESC"})
    d = json.load(urllib.request.urlopen(B + "?" + q, timeout=60))
    feats = d.get("features", [])
    for f in feats:
        a = f["attributes"]; g = f.get("geometry") or {}
        a["lon"], a["lat"] = g.get("x"), g.get("y")
        for k, v in list(a.items()):
            if k in ("APPLIED","APPROVED","ISSUED","FINALED","EXPIRED") and isinstance(v, (int, float)):
                a[k] = datetime.datetime.utcfromtimestamp(v / 1000).date().isoformat()
        rows.append(a)
    if len(feats) < 1000 and not d.get("exceededTransferLimit"): break
    off += len(feats)
json.dump(rows, open("feasibility/raw/mm_permits_2015plus.json", "w"))
print(len(rows), "permits")
