#!/usr/bin/env python3
import json,hashlib,sys,datetime,os
from pathlib import Path

PROJECT_ID='gacmai_20260718_091744'
ROOT=Path('/data/video-pipeline/GacMaiAudio/project')/PROJECT_ID

def sha(p): return hashlib.sha256(Path(p).read_bytes()).hexdigest()
def write_atomic(path,data):
    tmp=path.with_suffix(path.suffix+'.tmp')
    tmp.write_text(json.dumps(data,ensure_ascii=False,indent=2)+'\n')
    os.replace(tmp,path)

def main():
    if len(sys.argv)!=3: raise SystemExit('usage: promote_concept.py CANDIDATE AUDIT')
    candidate=Path(sys.argv[1]);audit=Path(sys.argv[2]);c=json.loads(candidate.read_text());a=json.loads(audit.read_text())
    ch=sha(candidate);ah=sha(audit)
    assert c['project_id']==PROJECT_ID
    assert a.get('verdict')=='pass'
    assert a.get('candidate_sha256')==ch
    assert a.get('domain_originality_contract_sha256')==sha(ROOT/'artifacts/domain_originality_contract_rev2.json')
    assert a.get('all_comparison_axes_checked') is True
    assert a.get('blocking_findings')==[]
    selected=ROOT/'artifacts/concept_selected.json'
    if selected.exists(): raise SystemExit('canonical concept already exists')
    selected.write_bytes(candidate.read_bytes())
    assert sha(selected)==ch
    now=datetime.datetime.now(datetime.timezone.utc).isoformat()
    receipt={'status':'passed','project_id':PROJECT_ID,'candidate_path':str(candidate),'candidate_sha256':ch,'canonical_path':str(selected),'canonical_sha256':sha(selected),'audit_path':str(audit),'audit_sha256':ah,'promoted_at':now}
    write_atomic(ROOT/'artifacts/concept_promotion_receipt.json',receipt)
    project=json.loads((ROOT/'project.json').read_text());project.update({'title':c['title'],'stage':'outline_generation','canonical_concept_sha256':ch,'updated_at':now});write_atomic(ROOT/'project.json',project)
    status=json.loads((ROOT/'status.json').read_text());status.update({'stage':'outline_generation','concept_locked':True,'canonical_concept_sha256':ch,'story_locked':True,'tts_locked':True,'visual_spend_locked':True,'updated_at':now});write_atomic(ROOT/'status.json',status)
    print(json.dumps({'status':'promoted','title':c['title'],'concept_sha256':ch,'audit_sha256':ah},ensure_ascii=False))
if __name__=='__main__': main()
