#!/usr/bin/env python3
"""Serves poc.html plus the generated MojoJS bindings from the Chrome build.

Usage:
    CHROME_OUT=/path/to/chromium/src/out/asan python3 server.py
"""
import http.server
import os
import socketserver
import sys

PORT = 8080
HERE = os.path.dirname(os.path.abspath(__file__))
CHROME_OUT = os.environ.get("CHROME_OUT")
if not CHROME_OUT:
    # Best-effort default for a local checkout.
    CHROME_OUT = os.path.join(
        os.path.dirname(HERE), "chromium", "src", "out", "asan")
GEN_DIR = os.path.join(CHROME_OUT, "gen")


class Handler(http.server.SimpleHTTPRequestHandler):
    def translate_path(self, path):
        # /gen/... is served from the Chrome build's generated-bindings dir so
        # poc.html can load mojo_bindings_lite.js and the *.mojom-lite.js
        # files without copying them.
        clean = path.split("?", 1)[0].split("#", 1)[0]
        if clean.startswith("/gen/"):
            return os.path.join(GEN_DIR, clean[len("/gen/"):])
        return os.path.join(HERE, clean.lstrip("/"))

    def end_headers(self):
        self.send_header("Cache-Control", "no-store")
        super().end_headers()


def main():
    if not os.path.isdir(GEN_DIR):
        sys.stderr.write(
            f"warning: gen dir not found at {GEN_DIR}; "
            "set CHROME_OUT=/path/to/out/<build>\n")
    socketserver.TCPServer.allow_reuse_address = True
    with socketserver.TCPServer(("127.0.0.1", PORT), Handler) as httpd:
        print(f"serving poc on http://127.0.0.1:{PORT}/poc.html "
              f"(gen={GEN_DIR})")
        httpd.serve_forever()


if __name__ == "__main__":
    main()
