#!/usr/bin/env python3
"""Static server para event.nolimitscollective360.com — sirve /root/nlc360-events en :8897.

Reemplaza al nginx nlc360-events (inactivo tras reboot). Clean URLs (/foo -> foo.html)
y directorios sirven su index.html. Sirve HTML/CSS/JS/img/video/PDF.
"""
import http.server
import mimetypes
import os
import posixpath
import socketserver
from urllib.parse import unquote

PORT = 8897
ROOT = '/root/nlc360-events'

# tipos que SimpleHTTP no siempre mapea
mimetypes.add_type('image/avif', '.avif')
mimetypes.add_type('video/mp4', '.mp4')
mimetypes.add_type('application/pdf', '.pdf')


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

    def end_headers(self):
        path = self.path.split('?', 1)[0]
        if path.endswith('.html') or path.endswith('/'):
            self.send_header('Cache-Control', 'no-cache, must-revalidate')
        else:
            self.send_header('Cache-Control', 'public, max-age=300')
        super().end_headers()

    def translate_path(self, path):
        """Clean URLs: si /foo no existe pero /foo.html sí, sirve el .html."""
        full = super().translate_path(path)
        if os.path.isdir(full) or os.path.isfile(full):
            return full
        # sin extensión y no existe -> probar .html
        clean = path.split('?', 1)[0].split('#', 1)[0]
        if not posixpath.splitext(clean)[1]:
            html_full = full.rstrip('/') + '.html'
            if os.path.isfile(html_full):
                return html_full
        return full


class ThreadedServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
    daemon_threads = True
    allow_reuse_address = True


if __name__ == '__main__':
    os.chdir(ROOT)
    with ThreadedServer(('0.0.0.0', PORT), Handler) as srv:
        print(f'nlc360-events server on :{PORT} root={ROOT}')
        srv.serve_forever()
