#!/usr/bin/env python3
from pathlib import Path
import json,re,sys
root=Path(__file__).resolve().parents[1]
contract=json.loads((root/'model-contract.json').read_text())
starter=(root/'sql/starter_schema.sql').read_text(); patch=(root/'sql/constraint_patch.sql').read_text(); validate=(root/'sql/post_repair_validate.sql').read_text()
issues=[]
if contract.get('starter_must_not_pre_solve_skill') is not True: issues.append('STARTER_POLICY_MISSING')
for token in ['orders_customer_fk','orders_external_ref_uq','orders_amount_positive_ck','orders_status_ck']:
    if token.lower() in starter.lower(): issues.append('STARTER_PRE_SOLVES_'+token.upper())
for col in ['customer_id','external_ref','amount','status']:
    if re.search(rf'CREATE TABLE orders[\s\S]*?{col}\s+[^,\n]+\s+NOT NULL',starter,re.I): issues.append('STARTER_PRE_SOLVES_'+col.upper()+'_REQUIREDNESS')
if 'TODO 1' not in patch or 'TODO 5' not in patch: issues.append('PATCH_SCAFFOLD_INCOMPLETE')
if re.search(r'ADD\s+CONSTRAINT\s+orders_',patch,re.I): issues.append('PATCH_PRE_SOLVES_NAMED_CONSTRAINTS')
sql_lines='\n'.join(line for line in patch.splitlines() if not line.lstrip().startswith('--'))
if re.search(r'VALIDATE\s+CONSTRAINT',sql_lines,re.I): issues.append('PATCH_MIXES_POST_REPAIR_VALIDATION')
if 'TODO 1' not in validate: issues.append('VALIDATION_SCAFFOLD_INCOMPLETE')
out={'schema':'DAT002_STATIC_PREFLIGHT_v2','status':'PASS' if not issues else 'FAIL','issues':issues}
print(json.dumps(out,indent=2)); sys.exit(0 if not issues else 1)
