#!/usr/bin/env python3

import sys
from http.server import SimpleHTTPRequestHandler
from socketserver import TCPServer
from urllib.parse import unquote, urlparse
from websocket import create_connection

URL_PATH = ""
if len(sys.argv) > 1:
    URL_PATH = sys.argv[1]
    if URL_PATH.startswith('/'):
        URL_PATH = URL_PATH[1::]

WS_SERVER = f"ws://example.com:5789/{URL_PATH}"


def send_ws(payload):
    ws = create_connection(WS_SERVER)
    # res = ws.recv()
    message = unquote(payload).replace('"', '\\"')
    data = '{"version": "' + message + '"}'

    ws.send(data)
    res = ws.recv()
    ws.close()

    if res:
        return res
    return 0


def middleware_server(host_port, content_type="text/plain"):

    class CustomHandler(SimpleHTTPRequestHandler):
        def do_GET(self) -> None:
            self.send_response(200)
            try:
                payload = urlparse(self.path).query.split('=', 1)[1]
            except IndexError:
                payload = False
            if payload:
                content = send_ws(payload)
            else:
                content = "No payload specified"
            self.send_header("Content-Type", content_type)
            self.end_headers()
            self.wfile.write(content.encode())

    class _TCPServer(TCPServer):
        allow_reuse_address = True

    httpd = _TCPServer(host_port, CustomHandler)
    httpd.serve_forever()


print(f"Payload is sent to {WS_SERVER} via http://localhost:8081/?id=*")

try:
    middleware_server(('0.0.0.0', 8081))
except KeyboardInterrupt:
    pass