import csv, json
from pathlib import Path

ROOT = Path(__file__).resolve().parents[4]
paths = ['/p/nutrition_set/lists', '/p/nutrition_set/listsAllSet', '/p/nutrition_time/lists', '/p/nutrition_set/info', '/p/nutrition_time/info']
sources = [ROOT/'work/2026-09-28-smart-canteen-dm8-poc/http-cron-coverage-matrix.csv', ROOT/'work_store/apifox/2026-09-30-dm8-interface-acceptance/derived/interface-contract-matrix.csv']
result = []
for source in sources:
    rows = list(csv.DictReader(source.open()))
    entries = []
    for path in paths:
        def key(row):
            return (row['repo'], row['method'], row.get('path', row.get('route_or_command')))
        exact = [r for r in rows if key(r) == ('store', 'POST', path)]
        folded = [r for r in rows if tuple(str(x).casefold() for x in key(r)) == ('store', 'post', path.casefold())]
        any_repo = [r for r in rows if str(key(r)[1]).casefold() == 'post' and str(key(r)[2]).casefold() == path.casefold()]
        semantic_review = [r for r in rows if 'nutrition' in str(key(r)[2]).casefold() and str(key(r)[2]).casefold().replace('_','') == path.casefold().replace('_','')]
        entries.append({'repo':'store','method':'POST','path':path,'exact':exact,'casefold':folded,'same_path_any_repo':any_repo,'underscore_variants_review_only':semantic_review})
    result.append({'source':str(source.relative_to(ROOT)),'row_count':len(rows),'candidates':entries})
print(json.dumps(result,ensure_ascii=False,indent=2))
