import http.server
import json
import ssl
from urllib.parse import urlparse

from dontneed.authxm_generator_ORIG import generate_auth_xml


class AuthXmlHandler(http.server.BaseHTTPRequestHandler):
    def do_GET(self):
        parsed = urlparse(self.path)

        if parsed.path != "/drm":
            self.send_error(404, "Not found")
            return

        if "getAuthXml" not in parsed.query:
            self.send_error(400, "Missing getAuthXml parameter")
            return

        try:
            auth_xml = generate_auth_xml()
            self.send_response(200)
            self.send_header("Content-Type", "text/plain")
            self.send_header("Access-Control-Allow-Origin", "*")
            self.end_headers()
            self.wfile.write(auth_xml.encode("utf-8"))
        except FileNotFoundError:
            self.send_error(404, "Key file not found")
        except Exception as e:
            self.send_error(500, str(e))

    def do_OPTIONS(self):
        self.send_response(204)
        self.send_header("Access-Control-Allow-Origin", "*")
        self.send_header("Access-Control-Allow-Methods", "GET, OPTIONS")
        self.send_header("Access-Control-Allow-Headers", "Content-Type")
        self.end_headers()

with open("config.json", "r") as f:
    config_data = json.load(f)
    auth_xml_port = int(config_data.get("AUTHXML_PORT"))
    player_port = int(config_data.get("PLAYER_KEYOSPROXY_PORT"))
    domain = config_data.get("DOMAIN", "localhost")

server_address = ("0.0.0.0", auth_xml_port)
httpd = http.server.HTTPServer(server_address, AuthXmlHandler)

ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ctx.load_cert_chain("cert.pem", "key.pem")
httpd.socket = ctx.wrap_socket(httpd.socket, server_side=True)

print(f"AuthXML server running on https://{domain}:{auth_xml_port}")
print(f"PLAYER running on https://{domain}:{player_port}/player/keyos_drm.html")
httpd.serve_forever()
