#!/usr/bin/env python3
import os,json,requests
from datetime import datetime,timedelta,timezone
from pathlib import Path
from zoneinfo import ZoneInfo
P='gacmai_20260716_233054';ROOT=Path('/data/video-pipeline/GacMaiAudio/project')/P;ART=ROOT/'artifacts';BASE=os.environ['POSTIZ_BASE_URL'].rstrip('/');HEAD={'Authorization':os.environ['POSTIZ_API_KEY']};TZ=ZoneInfo('Asia/Ho_Chi_Minh')
expected={'cmrodvgbg001uj7cs2a848df6':'cmriltjyk0013j7c8l7dp3o5i','cmrodvgbp001vj7cs0j5cd2nb':'cmrilrryn0011j7c8kfzgx9zq'};slot='2026-07-17T12:00:00Z'
def api(path,**kw):r=requests.get(BASE+path,headers=HEAD,timeout=60,**kw);r.raise_for_status();return r
def inst(x):return datetime.fromisoformat(x.replace('Z','+00:00')).astimezone(timezone.utc)
start=datetime(2026,7,17,tzinfo=timezone.utc);end=start+timedelta(days=3);body=api('/posts',params={'startDate':start.isoformat(),'endDate':end.isoformat()}).json();posts=body.get('posts',body if isinstance(body,list) else []);by={p.get('id'):p for p in posts};channels={};errors=[]
for pid,iid in expected.items():
 p=by.get(pid)
 if not p:errors.append(f'missing exact post {pid}');continue
 actual=(p.get('integration') or {}).get('id');date=p.get('publishDate');state=p.get('state');mr=api(f'/posts/{pid}/missing');missing=mr.json();ok=actual==iid and bool(date) and inst(date)==inst(slot) and state=='QUEUE' and missing==[]
 channels[iid]={'post_id':pid,'integration_id':actual,'state':state,'scheduled_date':date,'scheduled_local':inst(date).astimezone(TZ).isoformat() if date else None,'missing_http_status':mr.status_code,'missing':missing,'verified':ok}
 if not ok:errors.append(f'verification failed {pid}')
out={'status':'passed' if not errors else 'failed','project_id':P,'slot_utc':slot,'slot_local':inst(slot).astimezone(TZ).isoformat(),'channels':channels,'errors':errors,'read_only':True,'create_or_upload_calls':0};(ART/'postiz_exact_id_verification.json').write_text(json.dumps(out,ensure_ascii=False,indent=2)+'\n');print(json.dumps(out,ensure_ascii=False));raise SystemExit(0 if not errors else 1)
