#!/usr/bin/env python3
import datetime
import json
import os
import time
import urllib.parse
import urllib.request
from pathlib import Path

ROOT = Path('/data/video-pipeline/HaTramAudio/project/012-Nguoi-Giu-Chiec-Chia-Khoa-Cua-Ngay-Hom-Qua')
WORK = ROOT/'work/upload/run-20260720T084924Z-02f78a49'

def load_env(path):
    values={}
    for raw in path.read_text().splitlines():
        s=raw.strip()
        if s and not s.startswith('#') and '=' in s:
            k,v=s.split('=',1); values[k.strip()]=v.strip().strip('"\'')
    return values

env=load_env(Path.home()/'.config/ha-tram-audio/postiz.env')
base=env['POSTIZ_BASE_URL'].rstrip('/'); headers={'Authorization':env['POSTIZ_API_KEY']}
fb=env['POSTIZ_FACEBOOK_INTEGRATION_ID']; yt=env['POSTIZ_YOUTUBE_INTEGRATION_ID']; targets={fb,yt}
slot=datetime.datetime.fromisoformat('2026-07-25T02:20:00+00:00')
start=slot-datetime.timedelta(minutes=5); end=slot+datetime.timedelta(minutes=5)
query=urllib.parse.urlencode({'startDate':start.isoformat().replace('+00:00','Z'),'endDate':end.isoformat().replace('+00:00','Z')})
for attempt in range(1,11):
    req=urllib.request.Request(base+'/posts?'+query,headers=headers)
    with urllib.request.urlopen(req,timeout=60) as response: raw=json.load(response)
    posts=raw if isinstance(raw,list) else raw.get('posts') or raw.get('data') or []
    found=[]
    for p in posts:
        iid=(p.get('integration') or {}).get('id'); value=p.get('publishDate','')
        if iid not in targets or not value: continue
        dt=datetime.datetime.fromisoformat(value.replace('Z','+00:00'))
        if dt.tzinfo is None: dt=dt.replace(tzinfo=datetime.timezone.utc)
        if dt.astimezone(datetime.timezone.utc).replace(microsecond=0)==slot:
            found.append({'post_id':p.get('id') or p.get('postId'),'integration_id':iid,'state':p.get('state'),'publishDate':value})
    by={x['integration_id']:x for x in found if str(x.get('state')).upper()=='QUEUE'}
    print(json.dumps({'attempt':attempt,'queue_integrations':sorted(by),'found':found},ensure_ascii=False),flush=True)
    if set(by)==targets:
        out={'status':'completed','verified':True,'slot_utc':'2026-07-25T02:20:00Z','calendar_verification':[by[fb],by[yt]],'verified_at':datetime.datetime.now(datetime.timezone.utc).isoformat()}
        (WORK/'calendar-verification.json').write_text(json.dumps(out,ensure_ascii=False,indent=2)+'\n')
        print(json.dumps(out,ensure_ascii=False));raise SystemExit(0)
    time.sleep(min(30,3*attempt))
raise SystemExit(1)
