"""Count Annex I Word paragraphs by inferred section, without clinical inference."""
import argparse
from collections import defaultdict
import json
from corpus_io import DEFAULT_FOLDER, load_index, observations


def summarize(folder):
    manifest, _ = load_index(folder)
    groups = defaultdict(list)
    outside = 0
    for row in observations(folder):
        if row['annex'] == 'I' and row.get('section_code'):
            groups[row['section_code']].append(row)
        else:
            outside += 1
    sections = []
    for code in sorted(groups, key=lambda value: tuple(int(x) for x in value.split('.'))):
        rows = groups[code]
        sections.append({'section': code, 'observations': len(rows),
                         'medicines': len({row['medicine_id'] for row in rows}),
                         'source_snapshots': len({row['source_snapshot_id'] for row in rows}),
                         'distinct_text_pairs': len({(row['medicine_id'], row['language'], row['before_sha256'], row['after_sha256']) for row in rows})})
    return {'release_id': manifest['release_id'], 'sections': sections,
            'outside_annex_i_or_unassigned': outside,
            'unit': 'Word paragraph observations; inferred sections; not clinical events'}


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('--folder', type=type(DEFAULT_FOLDER), default=DEFAULT_FOLDER)
    print(json.dumps(summarize(parser.parse_args().folder), ensure_ascii=False, indent=2))
