import sys, time, requests; sys.path.insert(0,'proxy')
from bs4 import BeautifulSoup
from psionproxy import profiles
from psionproxy.extract import extract
UA=("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 "
    "(KHTML, like Gecko) Chrome/140.0 Safari/537.36")
SITES=[("BBC News","https://www.bbc.co.uk/news"),
       ("Wikipedia","https://en.wikipedia.org/wiki/Psion_Series_7"),
       ("Guardian","https://www.theguardian.com/uk"),
       ("Hacker News","https://news.ycombinator.com/"),
       ("gov.uk","https://www.gov.uk/")]
print(f"{'Site':13} {'upstream':>10} | {'EPOC out':>9} {'@11KB/s':>8} | "
      f"{'CE out':>9} {'@1.9KB/s':>9} {'CSS':>7} {'classes':>8}")
print("-"*86)
for name,url in SITES:
    try: html=requests.get(url,headers={"User-Agent":UA},timeout=30).text
    except Exception as e: print(f"{name:13} fetch failed"); continue
    row=[f"{name:13} {len(html):>9,}B |"]
    for pr in (profiles.EPOC, profiles.CE):
        t0=time.time(); body,_=extract(html,url,profile=pr); dt=time.time()-t0
        n=len(body.encode(pr.charset,"replace"))
        rate = 11000 if pr.key=="epoc" else 1900
        if pr.key=="epoc":
            row.append(f" {n:>8,}B {n/rate:>7.1f}s |")
        else:
            s=BeautifulSoup(body,"html.parser")
            css=sum(len("".join(str(c) for c in t.contents)) for t in s.find_all("style"))
            row.append(f" {n:>8,}B {n/rate:>8.1f}s {css:>6,}B {len(s.select('[class]')):>8}")
    print("".join(row))
