#!/usr/bin/env python3
import hashlib,json,sys
from pathlib import Path
P=Path(__file__).resolve().parents[1]
h=lambda p:hashlib.sha256(p.read_bytes()).hexdigest()
def main():
 mode=sys.argv[1] if len(sys.argv)>1 else 'full';a=json.loads((P/'script/workflow-copy-authority.json').read_text());b=json.loads((P/'image/image-brief.json').read_text());src=(P/'audio/intro-voice-source.txt').read_text();expected=a['spoken_intro']['exact_text'];blocks=a['left_panel']['ordered_text_blocks'];checks={'authority_locked':a.get('approval_state')=='locked','authority_hash':b.get('workflow_copy_authority_sha256')==h(P/'script/workflow-copy-authority.json'),'intro_source':src==expected and a['spoken_intro']['sha256']==hashlib.sha256(src.encode()).hexdigest(),'left_blocks':b['assets']['left_panel']['required_text']==blocks,'poster_blocks':all(b['assets'][asset]['required_text']==[b['canonical_title'], 'TRUYỆN AUDIO FULL', 'HUYỀN AN AUDIO'] for asset in ('intro_poster','right_panel')),'canon':b.get('source_canon_sha256')==h(P/'story/story-canon.txt')}
 result={'verified':all(checks.values()),'mode':mode,'workflow_copy_authority_sha256':h(P/'script/workflow-copy-authority.json'),'checks':checks};print(json.dumps(result,ensure_ascii=False));return 0 if result['verified'] else 1
if __name__=='__main__':sys.exit(main())
