#!/usr/bin/env python3
from pathlib import Path
import hashlib,json,subprocess,urllib.request
P=Path(__file__).resolve().parents[1];URL='http://192.168.1.104:8018/package-audio-safe'
def sha(f):
 h=hashlib.sha256()
 with open(f,'rb') as x:
  for b in iter(lambda:x.read(1024*1024),b''):h.update(b)
 return h.hexdigest()
def audio_sha(f):
 return hashlib.sha256(subprocess.check_output(['ffmpeg','-v','error','-i',str(f),'-map','0:a:0','-f','s16le','-ac','1','-ar','24000','-'])).hexdigest()
vars=[('youtube',Path('/data/video-pipeline/Channel-Loi-Co-Nhan/data/bgm/Borderless-Aakash-Gandhi.mp3'),P/'video/output/final.mp4'),('facebook',Path('/data/video-pipeline/Channel-Loi-Co-Nhan/data/bgm/miromaxmusic-documentary-background-436079.mp3'),P/'video/output/final-fb.mp4')]
assert vars[0][1].resolve()!=vars[1][1].resolve() and sha(vars[0][1])!=sha(vars[1][1])
for name,bgm,out in vars:
 req={'intro_video_path':str((P/'video/intro.mp4').resolve()),'main_video_path':str((P/'video/output/main-with-outro.mp4').resolve()),'bgm_audio_path':str(bgm.resolve()),'output_video_path':str(out.resolve()),'bgm_volume':0.2,'width':1920,'height':1080,'aspect_ratio':'16:9'}
 resp=json.load(urllib.request.urlopen(urllib.request.Request(URL,data=json.dumps(req).encode(),headers={'Content-Type':'application/json'},method='POST'),timeout=3600));assert resp.get('status')=='ok',resp
 d={'variant':name,'request':req,'bgm_size':bgm.stat().st_size,'bgm_sha256':sha(bgm),'response':resp,'size':out.stat().st_size,'sha256':sha(out),'decoded_audio_sha256':audio_sha(out)}
 (P/f'logs/package_bgm_remediation_{name}.json').write_text(json.dumps(d,ensure_ascii=False,indent=2)+'\n');print(name,'package PASS')
a=json.load(open(P/'logs/package_bgm_remediation_youtube.json'));b=json.load(open(P/'logs/package_bgm_remediation_facebook.json'));assert a['sha256']!=b['sha256'] and a['decoded_audio_sha256']!=b['decoded_audio_sha256'];prov={'status':'PASS','variants':{'youtube':a,'facebook':b}};(P/'logs/package_provenance_bgm_remediation.json').write_text(json.dumps(prov,ensure_ascii=False,indent=2)+'\n');print('COPYRIGHT_BGM_GATE PASS')
