from pathlib import Path
import json
from gate_rules import evaluate,inspect_transfer
R=Path(__file__).parent
def load(rel): return json.loads((R/rel).read_text())
checks=[
 ('baseline',evaluate(load('fixtures/baseline.json'))['state'],'MODIFY_AND_REVIEW_REQUIRED'),
 ('participation_mastery',evaluate(load('fixtures/participation_up_mastery_flat_unreviewed.json'))['state'],'MODIFY_AND_REVIEW_REQUIRED'),
 ('public_recompute',evaluate(load('fixtures/public_ranking_without_recompute.json'))['state'],'HOLD_EMPLOYER_VISIBILITY_RECOMPUTE'),
 ('opt_out',evaluate(load('fixtures/missing_opt_out.json'))['state'],'HOLD_OPT_OUT'),
 ('sunset',evaluate(load('fixtures/missing_sunset.json'))['state'],'HOLD_SUNSET'),
 ('owner',evaluate(load('fixtures/missing_owner.json'))['state'],'HOLD_REVIEW_OWNER'),
 ('provenance',evaluate(load('fixtures/missing_provenance.json'))['state'],'HOLD_PROVENANCE'),
 ('coercion',evaluate(load('fixtures/coercion_true.json'))['state'],'HOLD_COERCION'),
 ('autonomy',evaluate(load('fixtures/high_autonomy_risk_unmitigated.json'))['state'],'HOLD_AUTONOMY_RISK'),
 ('retire',evaluate(load('fixtures/mechanic_removed_behavior_persists.json'))['state'],'RETIRE_MECHANIC_REVIEW_REQUIRED'),
 ('transfer',inspect_transfer(load('transfer/transfer_fixture.json'))['state'],'HOLD_EMPLOYER_VISIBILITY_RECOMPUTE'),
 ('oracle',inspect_transfer(load('transfer/transfer_baseline_oracle_reuse.json'))['state'],'HOLD_BASELINE_ORACLE_REUSE')]
for name,a,e in checks:
    if a!=e: raise SystemExit(f'FAIL {name}: {a} != {e}')
    print(f'PASS {name}: {a}')
print('12/12 PASS')
