"""Live demo for the screen recording: one query through all three APIs,
then 12 back-to-back Firecrawl searches to show the free-plan rate limit.
Writes demo-capture.json: [{"t": seconds_since_start, "line": text}]."""
import json, time, run
keys = run.load_keys(); T0 = time.time(); out = []
def say(s=''):
    out.append({"t": round(time.time() - T0, 3), "line": s}); print(s, flush=True)
q = "Cursor Teams plan price per seat"
say(f'$ python3 run.py --query "{q}"'); say()
for name in ['exa', 'tavily', 'firecrawl']:
    env, fn = run.PROVIDERS[name]
    say(f'{run.NAME[name] if hasattr(run,"NAME") else name.capitalize():<10} searching...')
    s, ms, items, meta, err = fn(keys[env], q)
    for k, it in enumerate(items[:3], 1):
        d = it['url'].split('/')[2].replace('www.', '')
        say(f'  {k}. {d:<24} {(it["title"] or "")[:52]}')
    say(f'  -> HTTP {s}, {ms} ms, {len(items)} results'); say()
say('$ python3 run.py queries.txt --providers firecrawl   # no pause'); say()
qs = [l.split('|',1)[1].strip() for l in open('queries.txt') if '|' in l and not l.startswith('#')][10:22]
env, fn = run.PROVIDERS['firecrawl']
for i, qq in enumerate(qs, 1):
    s, ms, items, meta, err = fn(keys[env], qq)
    tail = f'{len(items)} results' if s == 200 else 'Rate limit exceeded, retry after ' + str(json.loads(err).get('retry_after_seconds', '?') if err and err.startswith('{') else '?') + 's'
    say(f'  [{i:2}] HTTP {s}  {ms:5} ms  {tail}')
say(); say('# Free plan: 10 searches a minute. Calls 11+ are refused (and not billed).')
json.dump(out, open('demo-capture.json', 'w'), indent=0)
