#!/usr/bin/env python3
"""HTTP server for the WritableStream cross-world abort() POC.

Serves:
  - POC files from this directory
  - /gen/**          -> Chromium build's generated MojoJS bindings
"""
import http.server
import os
import socketserver
import sys

PORT = int(os.environ.get("PORT", "8080"))
ARTIFACTS_DIR = os.path.dirname(os.path.abspath(__file__))
GEN_DIR = os.environ.get(
    "CHROMIUM_GEN_DIR", "/chromium/chromium/src/out/asan/gen")


class Handler(http.server.SimpleHTTPRequestHandler):
    extensions_map = {
        **http.server.SimpleHTTPRequestHandler.extensions_map,
        ".js": "text/javascript",
        ".mjs": "text/javascript",
        ".html": "text/html",
    }

    def translate_path(self, path):
        # Strip query string.
        path = path.split("?", 1)[0].split("#", 1)[0]
        if path.startswith("/gen/"):
            rel = path[len("/gen/"):]
            return os.path.join(GEN_DIR, rel)
        # Default: serve from artifacts directory.
        rel = path.lstrip("/")
        return os.path.join(ARTIFACTS_DIR, rel)

    def end_headers(self):
        # Mojo .m.js modules use relative imports across /gen/ subtrees;
        # avoid CORS issues for module scripts.
        self.send_header("Access-Control-Allow-Origin", "*")
        super().end_headers()


class ReuseAddrTCPServer(socketserver.TCPServer):
    allow_reuse_address = True


if __name__ == "__main__":
    os.chdir(ARTIFACTS_DIR)
    with ReuseAddrTCPServer(("127.0.0.1", PORT), Handler) as httpd:
        print(f"Serving on http://127.0.0.1:{PORT}", file=sys.stderr)
        httpd.serve_forever()
