"""Inspect a synthetic handover register for declared completeness only.
Does not read artifact files, validate rights, recover a system or contact a vendor.
"""
import csv
import json
import sys
from pathlib import Path


def inspect(path):
    with Path(path).open(newline='', encoding='utf-8') as file:
        rows = list(csv.DictReader(file))
    required_columns = {'item', 'required', 'evidence_available', 'artifact_reference', 'continuation_owner', 'expected_use'}
    if not rows or not required_columns.issubset(rows[0]):
        raise ValueError('Required register columns missing or register empty')
    if len({r['item'].strip() for r in rows}) != len(rows):
        raise ValueError('Repeated register item')
    incomplete = []
    required = 0
    for row in rows:
        if row['required'] not in ('yes', 'no') or row['evidence_available'] not in ('yes', 'no'):
            raise ValueError('Use yes or no for required/evidence_available')
        if row['required'] == 'no':
            if not row['expected_use'].strip():
                raise ValueError('Explain non-applicable rows in expected_use')
            continue
        required += 1
        missing = []
        if row['evidence_available'] != 'yes':
            missing.append('available evidence')
        if not row['artifact_reference'].strip():
            missing.append('artifact reference')
        if not row['continuation_owner'].strip():
            missing.append('continuation owner')
        if not row['expected_use'].strip():
            missing.append('expected use')
        if missing:
            incomplete.append({'item': row['item'], 'missing': missing})
    return {'status': 'HOLD' if incomplete else 'COMPLETE', 'required_rows': required,
            'incomplete_required_rows': len(incomplete), 'incomplete': incomplete,
            'scope': 'Declared inventory completeness only; no files opened, import, rights or recovery verified'}


if __name__ == '__main__':
    print(json.dumps(inspect(sys.argv[1]), indent=2))
