#!/usr/bin/env python3
"""Tiny static server for the amou project.

Usage: server.py [PORT] [HOST]
  PORT defaults to 3002, HOST defaults to 127.0.0.1 (loopback only;
  the public reverse proxy is the only internet-facing piece).

Serves files from this script's own directory.
"""
import http.server, socketserver, os, sys

ROOT = os.path.dirname(os.path.abspath(__file__))
PORT = int(sys.argv[1]) if len(sys.argv) > 1 else 3002
HOST = sys.argv[2] if len(sys.argv) > 2 else "127.0.0.1"


class H(http.server.SimpleHTTPRequestHandler):
    def __init__(self, *a, **kw):
        super().__init__(*a, directory=ROOT, **kw)

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

    def log_message(self, fmt, *args):
        fwd = self.headers.get("X-Forwarded-For", "")
        ip = fwd.split(",")[0].strip() if fwd else self.client_address[0]
        sys.stderr.write("%s - - [%s] %s\n" % (
            ip, self.log_date_time_string(), fmt % args))


class TS(socketserver.ThreadingMixIn, socketserver.TCPServer):
    allow_reuse_address = True
    daemon_threads = True


with TS((HOST, PORT), H) as httpd:
    print(f"serving {ROOT} on {HOST}:{PORT}", flush=True)
    httpd.serve_forever()
