#!/usr/bin/env python3
# Serve a folder locally with the cross-origin-isolation headers the threads
# build needs (Live Server and most static servers do not send these).
#
#   python web/serve.py            # serves ./build/web on http://localhost:8000
#   python web/serve.py build/web 8080
#
# Then open the printed URL. In the console, `crossOriginIsolated` must be true.
import http.server
import socketserver
import sys
import os

directory = sys.argv[1] if len(sys.argv) > 1 else "build/web"
port = int(sys.argv[2]) if len(sys.argv) > 2 else 8000


class Handler(http.server.SimpleHTTPRequestHandler):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, directory=directory, **kwargs)

    def end_headers(self):
        self.send_header("Cross-Origin-Opener-Policy", "same-origin")
        self.send_header("Cross-Origin-Embedder-Policy", "require-corp")
        self.send_header("Cross-Origin-Resource-Policy", "cross-origin")
        # No caching, so a fresh export is always what you see.
        self.send_header("Cache-Control", "no-store")
        super().end_headers()


if not os.path.isdir(directory):
    sys.exit("No such folder: %s (export the game first)" % directory)

socketserver.TCPServer.allow_reuse_address = True
with socketserver.TCPServer(("127.0.0.1", port), Handler) as httpd:
    print("Serving %s at http://localhost:%d  (Ctrl+C to stop)" % (directory, port))
    httpd.serve_forever()
