"""Read an exported OriginChainDB result and produce local review actions.

This example never sends tickets, approves software, or contacts a service.
The input columns deliberately match the verified console CSV export.
"""
import csv, json, sys
from pathlib import Path

ACTIONS = {
    'ready_for_review': 'standard_review',
    'declaration_missing': 'request_declaration',
    'evidence_missing': 'request_source_evidence',
}

def route(path):
    actions, seen = [], set()
    with Path(path).open(encoding='utf-8-sig', newline='') as stream:
        rows = csv.DictReader(stream)
        required = {'c.component_key', 'c.component_name', 'c.current_version', 'review_state'}
        if not required.issubset(rows.fieldnames or []):
            raise ValueError('Export columns do not match the verified query')
        for row in rows:
            key, state = row['c.component_key'], row['review_state']
            if not key or key in seen or state not in ACTIONS:
                raise ValueError('Missing/duplicate component key or unknown review state')
            seen.add(key)
            actions.append({'component_key':key, 'component':row['c.component_name'],
                'version':row['c.current_version'], 'observed_state':state,
                'action':ACTIONS[state], 'human_review_required':True})
    return {'source':'Actual console CSV export', 'external_actions_sent':False, 'actions':actions}

if __name__ == '__main__':
    if len(sys.argv) != 2:
        raise SystemExit('Usage: python route-review-rows.py live-review-result.csv')
    print(json.dumps(route(sys.argv[1]),indent=2))
