"""Write RELATED-by-region.csv (every RELATED scheme with its state / district / town and region flags) and print the counts.

Uses region.py's locate() (realtycheck state/district first, else the catalogue row's area) — run from the match folder.
"""
import csv, collections, json, sys
sys.path.insert(0, 'scripts/pipeline')
from region import locate, region_flags, rc, cat  # noqa: E402

rows = [r for r in csv.DictReader(open('FINAL-crosswalk.csv')) if r['decision'] == 'RELATED']
links = {o['scheme_id']: o for o in json.load(open('final_links.json'))}
counts = collections.Counter()
with open('RELATED-by-region.csv', 'w', newline='', encoding='utf-8') as fh:
    w = csv.writer(fh)
    w.writerow(['scheme_id', 'scheme_name', 'category', 'segment', 'state', 'district', 'town', 'klang_valley', 'rc_median_rm', 'rc_psf',
                'rc_sales', 'related_catalogue_project', 'catalogue_type', 'catalogue_median_rm', 'catalogue_uuid', 'why_related'])
    for r in rows:
        state, district, town = locate(r)
        flags = region_flags(state, district, town)
        counts.update(k for k, v in flags.items() if v); counts['ALL'] += 1
        if r['segment'] == 'high-rise':
            counts['ALL high-rise'] += 1
            counts.update(k + ' (high-rise)' for k, v in flags.items() if v)
        s = rc[r['scheme_id']]; c = cat.get(r['catalog_project_uuid'], {})
        w.writerow([r['scheme_id'], s['display_name'], s['category'], r['segment'], state, district, town,
                    'yes' if flags['Klang Valley'] else 'no', s['median_rm'], s['reported_psf'], s['source_n'],
                    c.get('project_name', ''), c.get('property_type') or '', c.get('price_median') or '', r['catalog_project_uuid'],
                    links[r['scheme_id']]['note'] or ''])
for k in ('ALL', 'Klang Valley', 'Kuala Lumpur', 'Selangor', 'Kajang', 'Semenyih', 'Seremban', 'ALL high-rise', 'Klang Valley (high-rise)'):
    print(f'{k}: {counts[k]}')
