"""Loopback-only nested HTTP gzip/Base64 controls. Requires requests."""
import base64, gzip, hashlib, json, platform, threading
from pathlib import Path
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
import requests

HERE=Path(__file__).resolve().parent
PAYLOAD=b'BASE64-HTTP-CONTROL\n'
INNER=gzip.compress(PAYLOAD,mtime=0)
TEXT=base64.b64encode(INNER)
OUTER=gzip.compress(TEXT,mtime=0)
CASES={
 '/base64':(TEXT,None),
 '/http-gzip-base64':(OUTER,'gzip'),
 '/false-gzip-header':(TEXT,'gzip'),
 '/gzip-file':(INNER,None),
}
class Handler(BaseHTTPRequestHandler):
 def log_message(self,*args): pass
 def do_GET(self):
  if self.path not in CASES: self.send_error(404);return
  body,coding=CASES[self.path]
  self.send_response(200)
  self.send_header('Content-Type','application/gzip' if self.path=='/gzip-file' else 'text/plain')
  self.send_header('Content-Length',str(len(body)))
  if coding:self.send_header('Content-Encoding',coding)
  self.end_headers();self.wfile.write(body)

def attempt(fn):
 try:
  value=fn()
  return {'ok':True,'bytes':len(value),'sha256':hashlib.sha256(value).hexdigest(),'matches_payload':value==PAYLOAD}
 except Exception as exc:return {'ok':False,'error_type':type(exc).__name__,'message':str(exc)}

for name,data in [('payload.bin',PAYLOAD),('inner.gz',INNER),('inner.b64.txt',TEXT),('http-outer.gz',OUTER)]:
 (HERE/name).write_bytes(data)
server=ThreadingHTTPServer(('127.0.0.1',0),Handler)
thread=threading.Thread(target=server.serve_forever,daemon=True);thread.start()
rows=[]
with requests.Session() as session:
 session.trust_env=False
 try:
  for path,(wire,coding) in CASES.items():
   row={'path':path,'declared_bytes':len(wire),'content_encoding':coding}
   with session.get(f'http://127.0.0.1:{server.server_port}{path}',stream=True,timeout=5) as r:
    raw=r.raw.read(decode_content=False)
    assert raw==wire
    row['raw_bytes']=len(raw);row['raw_sha256']=hashlib.sha256(raw).hexdigest()
    row['raw_as_base64_then_gzip']=attempt(lambda:gzip.decompress(base64.b64decode(raw,validate=True)))
   try:
    with session.get(f'http://127.0.0.1:{server.server_port}{path}',timeout=5) as r:
     content=r.content
     row['client_bytes']=len(content)
     row['client_sha256']=hashlib.sha256(content).hexdigest()
     row['client_as_base64_then_gzip']=attempt(lambda:gzip.decompress(base64.b64decode(content,validate=True)))
     row['client_gzip_first']=attempt(lambda:gzip.decompress(content))
   except requests.RequestException as exc:
    row['client_error']={'error_type':type(exc).__name__,'message':str(exc)}
   rows.append(row)
 finally:server.shutdown();server.server_close();thread.join()
assert rows[0]['client_as_base64_then_gzip']['matches_payload']
assert rows[1]['client_as_base64_then_gzip']['matches_payload']
assert not rows[1]['raw_as_base64_then_gzip']['ok']
assert rows[2]['client_error']['error_type']=='ContentDecodingError'
assert rows[2]['raw_as_base64_then_gzip']['matches_payload']
assert not rows[3]['client_as_base64_then_gzip']['ok']
assert rows[3]['client_gzip_first']['matches_payload']
report={'measured_date':'2026-10-23','python':platform.python_version(),'requests':requests.__version__,
 'sizes':{'payload':len(PAYLOAD),'inner_gzip':len(INNER),'base64':len(TEXT),'http_outer_gzip':len(OUTER)},
 'rows':rows,'all_assertions_passed':True}
(HERE/'measurements.json').write_text(json.dumps(report,indent=2)+'\n',encoding='utf-8')
print(json.dumps(report,indent=2))
