"""Independent checks of submitted tabular metadata, not a raw-map reproduction."""
import collections
import csv
import hashlib
import json
import pathlib
import sys

b = pathlib.Path(sys.argv[1])
listed = list(csv.DictReader((b/'data/included_maps.csv').open()))
results = list(csv.DictReader((b/'results/per_map.csv').open()))
passing = {r['image_id'] for r in results if r['status'] == 'ok'}
analyzed = [r for r in listed if r['image_id'] in passing]
known_df = [r for r in analyzed if r['map_type'] == 'T' and r['df_meta']]
mismatched_df = [r for r in known_df if float(r['df_meta']) != int(r['N'])-1]
task_support = {t: len({r['collection_id'] for r in analyzed if r['task'] == t})
                for t in {r['task'] for r in analyzed}}
out = {
    'listed': len(listed), 'analyzed': len(analyzed),
    'collections': len({r['collection_id'] for r in analyzed}),
    'known_df_T_maps': len(known_df), 'df_not_N_minus_one': len(mismatched_df),
    'df_disagreements': [{k: r[k] for k in ['image_id','N','df_meta']} for r in mismatched_df],
    'below_floor': sum(float(r['delta2']) < .0001 for r in results if r['status'] == 'ok'),
    'task_categories': len(task_support),
    'categories_present_in_one_collection': sum(n == 1 for n in task_support.values()),
    'map_types': dict(collections.Counter(r['map_type'] for r in analyzed)),
    'parameters_copies_equal': (b/'plan/parameters.json').read_bytes() == (b/'data/parameters.json').read_bytes(),
    'analysis_code_copies_equal': (b/'plan/code/analyze.py').read_bytes() == (b/'code/analyze.py').read_bytes(),
    'list_sha256': hashlib.sha256((b/'data/included_maps.csv').read_bytes()).hexdigest(),
    'examples_for_design_validation': [{k:r[k] for k in ['image_id','N','df_meta','map_type','name','doi']}
        for r in analyzed if r['image_id'] in {'39174','39175','115599','115600'}],
}
print(json.dumps(out, indent=2))
