"""Step 1: Bellingham middle-housing building permits since 2015 (City permits ArcGIS layer).

Keeps new-construction and ADU permits only (drops remodel/repair/addition noise and the duplicate
FOUNDATION ONLY / DEFERRED IMPACT FEES permits, which are folded into the unit's main permit as timeline notes).
Output: data/raw/permits.json
"""
import collections
from common import arcgis_query, epoch_to_date, save, norm_addr

URL = "https://maps.cob.org/arcgis3/rest/services/Maps/Permits/MapServer/0"
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)
MAIN_SUBTYPES = {"NEW STRUCTURE", "ADU", "NEW CONSTRUCTION", "REGISTERED PLAN"}
SIDE_SUBTYPES = {"FOUNDATION ONLY", "DEFERRED IMPACT FEES"}
DATES = ("APPLIED", "APPROVED", "ISSUED", "FINALED", "EXPIRED")

if __name__ == "__main__":
    rows = arcgis_query(URL, WHERE, geom=True, order="APPLIED DESC")
    for r in rows:
        for k in DATES:
            r[k] = epoch_to_date(r.get(k))
    main = [r for r in rows if r.get("PermitSubType") in MAIN_SUBTYPES]
    side = collections.defaultdict(list)
    for r in rows:
        if r.get("PermitSubType") in SIDE_SUBTYPES:
            side[norm_addr(r["SITE_ADDR"])].append({k: r.get(k) for k in ("PERMIT_NO", "PermitSubType", "STATUS") + DATES})
    for r in main:
        r["side_permits"] = side.get(norm_addr(r["SITE_ADDR"]), [])
    save("permits.json", main)
    print(f"{len(rows)} raw permits -> {len(main)} new-construction/ADU permits;",
          collections.Counter(r["STATUS"] for r in main).most_common(6))
