from pathlib import Path
import sys

ROOT = Path(__file__).resolve().parents[1]
BACKEND = ROOT / 'backend'

checks = {
    'PayrollLineItem': [
        ('apps/payroll/services.py', 'PayrollLineItem.objects.bulk_create'),
        ('apps/reports/services.py', 'line_items'),
    ],
    'PayrollAdjustment': [
        ('apps/payroll/forms.py', 'class PayrollAdjustmentForm'),
        ('apps/payroll/views.py', 'def payroll_adjustment_create'),
        ('apps/payroll/services.py', 'payroll.adjustments.all()'),
        ('templates/payroll/period_detail.html', 'Payroll adjustment'),
    ],
    'EmployeeDocument': [
        ('apps/employees/forms.py', 'EmployeeDocument'),
        ('apps/employees/views.py', 'employee_document'),
    ],
    'ImportRowError': [
        ('apps/imports/services.py', 'ImportRowError'),
        ('templates/imports/job_detail.html', 'Validation Errors'),
    ],
    'NoticeRecipient': [
        ('apps/workflow/services.py', 'NoticeRecipient'),
        ('apps/workflow/views.py', 'NoticeRecipient'),
    ],
    'Custom employee fields': [
        ('apps/employees/forms.py', 'CustomFieldDefinition'),
        ('apps/employees/forms.py', 'CustomFieldValue'),
        ('apps/employees/views.py', 'custom_field'),
    ],
}

lines = ['# QA-014 Model Flow Audit', '', 'Designed models/features checked for normal business-flow wiring.', '']
failed = []
for label, refs in checks.items():
    evidence = []
    ok = True
    for rel, token in refs:
        path = BACKEND / rel
        exists = path.exists() and token in path.read_text(encoding='utf-8', errors='ignore')
        evidence.append(f"- {'PASS' if exists else 'FAIL'} `{rel}` contains `{token}`")
        ok &= exists
    lines.append(f"## {label} — {'PASS' if ok else 'FAIL'}")
    lines.extend(evidence)
    lines.append('')
    if not ok:
        failed.append(label)

lines.append('## Result')
if failed:
    lines.append('FAIL — incomplete normal-flow wiring: ' + ', '.join(failed))
else:
    lines.append('STATIC PASS — all QA-014 named models/features have business-flow evidence. Local Django/PostgreSQL runtime verification is still required.')

out = ROOT / 'QA-014-MODEL-FLOW-AUDIT.md'
out.write_text('\n'.join(lines) + '\n', encoding='utf-8')
print(out)
if failed:
    sys.exit(1)
