#!/usr/bin/env python3
import http.client
import os
import sys

# Proxy to nginx instead of sqld directly
PROXY_HOST = "127.0.0.1"
PROXY_PORT = 8080  # nginx is listening here

CORS_HEADERS = (
    "Access-Control-Allow-Origin: *\r\n"
    "Access-Control-Allow-Methods: GET, POST, OPTIONS\r\n"
    "Access-Control-Allow-Headers: Content-Type, Authorization\r\n"
    "Access-Control-Max-Age: 3600\r\n"
)

method = os.environ.get("REQUEST_METHOD", "GET")

# Handle CORS preflight
if method == "OPTIONS":
    sys.stdout.write("Status: 204 No Content\r\n")
    sys.stdout.write(CORS_HEADERS)
    sys.stdout.write("\r\n")
    sys.stdout.flush()
    sys.exit(0)

path = os.environ.get("PATH_INFO", "/")
query = os.environ.get("QUERY_STRING", "")
if query:
    path = path + "?" + query

content_length = int(os.environ.get("CONTENT_LENGTH") or 0)
body = None
if content_length > 0:
    body = sys.stdin.buffer.read(content_length)

headers = {}

# Forward Authorization header (try multiple env vars)
auth_header = (
    os.environ.get("HTTP_AUTHORIZATION") or 
    os.environ.get("Authorization") or 
    os.environ.get("REDIRECT_HTTP_AUTHORIZATION")
)
if auth_header:
    headers["Authorization"] = auth_header

# Forward Upgrade header for WebSocket
upgrade_header = os.environ.get("HTTP_UPGRADE")
if upgrade_header:
    headers["Upgrade"] = upgrade_header
    headers["Connection"] = "Upgrade"

# Forward other headers
for key, value in os.environ.items():
    if key.startswith("HTTP_") and key not in ("HTTP_HOST", "HTTP_AUTHORIZATION", "HTTP_UPGRADE"):
        header_name = key[5:].replace("_", "-")
        headers[header_name] = value

if "CONTENT_TYPE" in os.environ:
    headers["Content-Type"] = os.environ["CONTENT_TYPE"]
if content_length > 0:
    headers["Content-Length"] = str(content_length)

try:
    conn = http.client.HTTPConnection(PROXY_HOST, PROXY_PORT, timeout=300)
    conn.request(method, path, body=body, headers=headers)
    resp = conn.getresponse()
    resp_body = resp.read()

    sys.stdout.write(f"Status: {resp.status} {resp.reason}\r\n")
    for k, v in resp.getheaders():
        lower_k = k.lower()
        if lower_k not in ("transfer-encoding", "connection", "content-length"):
            sys.stdout.write(f"{k}: {v}\r\n")
    sys.stdout.write(f"Content-Length: {len(resp_body)}\r\n")
    sys.stdout.write(CORS_HEADERS)
    sys.stdout.write("\r\n")
    sys.stdout.flush()
    sys.stdout.buffer.write(resp_body)
    sys.stdout.buffer.flush()
except Exception as e:
    sys.stdout.write("Status: 502 Bad Gateway\r\n")
    sys.stdout.write("Content-Type: text/plain\r\n")
    sys.stdout.write(CORS_HEADERS)
    sys.stdout.write("\r\n")
    sys.stdout.write(f"Proxy error: {str(e)}")
    sys.stdout.flush()
