import sqlite3,hashlib,json,sys,datetime
P=sys.argv[1]; B=sys.argv[2]
def conn(p):
c=sqlite3.connect('file:'+p+'?mode=ro&immutable=1',uri=True); c.row_factory=sqlite3.Row; return c
def fkset(c): return {(r[0],r[1],r[2],r[3]) for r in c.execute('pragma foreign_key_check')}
def count(c,q,args=()): return c.execute(q,args).fetchone()[0]
p=conn(P); b=conn(B); pv=fkset(p); bv=fkset(b)
fp=lambda x: hashlib.sha256(json.dumps(sorted(x)).encode()).hexdigest()
summary={'checked_at':datetime.datetime.now(datetime.timezone.utc).isoformat(),'prod_integrity':p.execute('pragma integrity_check').fetchone()[0],'prod_fk_count':len(pv),'backup_fk_count':len(bv),'prod_fp':fp(pv),'backup_fp':fp(bv),'fk_set_equal':pv==bv,'new_child_rowids':sorted(pv-bv),'removed_child_rowids':sorted(bv-pv),'ku_count':count(p,'select count(*) from knowledge_units'),'legacy':count(p,'select count(*) from knowledge_units where legacy_placeholder=1'),'legacy_rejected_none':count(p,'select count(*) from knowledge_units where review_state=? and gold_state=?',('REJECTED','NONE')),'review_states':dict(p.execute('select review_state,count(*) from knowledge_units group by review_state').fetchall()),'evidence':dict(p.execute('select evidence_class,count(*) from knowledge_units group by evidence_class').fetchall()),'gold_states':dict(p.execute('select gold_state,count(*) from knowledge_units group by gold_state').fetchall()),'prov_count':count(p,'select count(*) from knowledge_unit_provenance'),'review_audit_count':count(p,'select count(*) from knowledge_unit_review_audit'),'new_table_fk':{t:len(p.execute('pragma foreign_key_check('+t+')').fetchall()) for t in ['knowledge_unit_provenance','knowledge_unit_review_audit']},'queue_status_prod':dict(p.execute('select graphiti_status,count(*) from graphiti_import_queue group by graphiti_status').fetchall()),'queue_status_backup':dict(b.execute('select graphiti_status,count(*) from graphiti_import_queue group by graphiti_status').fetchall()),'graphiti_release_prod':dict(p.execute('select graphiti_release,count(*) from graphiti_import_queue group by graphiti_release').fetchall()),'graphiti_release_backup':dict(b.execute('select graphiti_release,count(*) from graphiti_import_queue group by graphiti_release').fetchall())}
print(json.dumps(summary,ensure_ascii=False)); p.close(); b.close()