#!/usr/bin/env python3
import http.server, ssl, os, urllib.request

os.chdir(os.path.dirname(os.path.abspath(__file__)))

class KioskHandler(http.server.SimpleHTTPRequestHandler):
    def end_headers(self):
        self.send_header('Cross-Origin-Embedder-Policy', 'unsafe-none')
        self.send_header('Cross-Origin-Opener-Policy', 'unsafe-none')
        self.send_header('Access-Control-Allow-Origin', '*')
        super().end_headers()

    def do_POST(self):
        # Proxy POST to kiosk API
        if self.path.startswith('/kiosk/api/'):
            self._proxy_to_api()
            return
        self.send_response(405)
        self.end_headers()

    def do_GET(self):
        # Proxy GET to kiosk API
        if self.path.startswith('/kiosk/api/'):
            self._proxy_to_api()
            return
        super().do_GET()

    def _proxy_to_api(self):
        api_path = self.path.replace('/kiosk/api', '', 1)
        if not api_path: api_path = '/'
        try:
            length = int(self.headers.get('Content-Length', 0))
            body = self.rfile.read(length) if length else None
            req = urllib.request.Request(
                f'http://localhost:8090{api_path}',
                data=body,
                method=self.command
            )
            req.add_header('Content-Type', self.headers.get('Content-Type', 'application/json'))
            resp = urllib.request.urlopen(req, timeout=10)
            data = resp.read()
            self.send_response(resp.status)
            self.send_header('Content-Type', 'application/json')
            self.send_header('Access-Control-Allow-Origin', '*')
            self.end_headers()
            self.wfile.write(data)
        except Exception as e:
            self.send_response(502)
            self.send_header('Content-Type', 'application/json')
            self.end_headers()
            import json
            self.wfile.write(json.dumps({'error': str(e)}).encode())

server = http.server.HTTPServer(("0.0.0.0", 8088), KioskHandler)
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ctx.load_cert_chain("cert.pem", "key.pem")
server.socket = ctx.wrap_socket(server.socket, server_side=True)
print("HTTPS server on https://0.0.0.0:8088 (with kiosk API proxy)")
server.serve_forever()
