#!/usr/bin/env python3
"""Checks whether each prospect domain is running ads: Google Transparency Center (three domain-keyed routes) and the Meta Ad Library
(one domain-keyed route, one name-keyed route), one raw record per call, via the treg CLI.
Usage: scripts/run-ads-prospect-check.py evidence/fixtures/ads-prospects-v1.json evidence/ads-prospect-checks/YYYY-MM-DD
About $1.70 for 40 domains at 2026-10-12 list prices (Adyntel and SerpApi dominate)."""
import json, sys, os, subprocess, time, concurrent.futures as cf
fx = json.load(open(sys.argv[1])); out = os.path.join(sys.argv[2], 'raw'); os.makedirs(out, exist_ok=True)
def call(label, argv, meta):
    f = os.path.join(out, label + '.json')
    if os.path.exists(f): return
    t0 = time.time(); p = subprocess.run(['treg', 'call', *argv], capture_output=True, text=True); ms = int((time.time() - t0) * 1000)
    raw = p.stdout if p.stdout.strip() else p.stderr
    try: body = json.loads(raw)
    except Exception: body = {'_nonjson': raw[:2000]}
    json.dump({'_run': {**meta, 'label': label, 'latency_ms': ms, 'exit': p.returncode, 'ts': time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime())}, 'response': body}, open(f, 'w'))
    print(label, ms, 'ms exit', p.returncode, flush=True)
jobs = []
for a in fx['prospects']:
    k, n, d = a['id'], a['name'], a['domain']
    m = {'id': k, 'domain': d, 'name': n}
    jobs += [
      (f'google-sc-{k}', ['scrapecreators.x.v1-google-company-ads', '--query', f'domain={d}'], {**m, 'platform': 'google', 'route': 'sc'}),
      (f'google-adyntel-{k}', ['adyntel.google.ads.transparency', '--method', 'POST', '--data', json.dumps({'company_domain': d})], {**m, 'platform': 'google', 'route': 'adyntel'}),
      (f'google-serpapi-{k}', ['serpapi.google.ads.transparency', '--query', 'engine=google_ads_transparency_center', '--query', f'text={d}', '--query', 'num=40'], {**m, 'platform': 'google', 'route': 'serpapi'}),
      (f'meta-adyntel-{k}', ['adyntel.meta-ads.library.advertiser', '--method', 'POST', '--data', json.dumps({'company_domain': d, 'country_code': 'US'})], {**m, 'platform': 'meta', 'route': 'adyntel'}),
      (f'meta-sc-{k}', ['scrapecreators.x.v1-facebook-adlibrary-company-ads', '--query', f'companyName={n}', '--query', 'country=US', '--query', 'trim=true'], {**m, 'platform': 'meta', 'route': 'sc'}),
    ]
by = {}
for j in jobs: by.setdefault(j[2]['platform'] + '/' + j[2]['route'], []).append(j)
with cf.ThreadPoolExecutor(max_workers=len(by)) as ex:
    list(ex.map(lambda lst: [call(*j) for j in lst], by.values()))
print('done', len(jobs))
