import os
import sys

os.environ["OPENBLAS_NUM_THREADS"] = "1"
os.environ["OMP_NUM_THREADS"] = "1"
os.environ["MKL_NUM_THREADS"] = "1"

import urllib.request
import urllib.error

UVICORN_URL = "http://127.0.0.1:8765"

def application(environ, start_response):
    # Build the target URL
    path  = environ.get("REQUEST_URI", "/")
    url   = UVICORN_URL + path

    # Forward the request to Uvicorn
    method  = environ.get("REQUEST_METHOD", "GET")
    headers = {}

    # Copy relevant headers
    if environ.get("CONTENT_TYPE"):
        headers["Content-Type"] = environ["CONTENT_TYPE"]
    if environ.get("HTTP_AUTHORIZATION"):
        headers["Authorization"] = environ["HTTP_AUTHORIZATION"]
    if environ.get("HTTP_X_API_KEY"):
        headers["X-Api-Key"] = environ["HTTP_X_API_KEY"]
    if environ.get("HTTP_ACCEPT"):
        headers["Accept"] = environ["HTTP_ACCEPT"]

    # Read request body if present
    body = None
    if method in ("POST", "PUT", "PATCH"):
        try:
            length = int(environ.get("CONTENT_LENGTH") or 0)
            body   = environ["wsgi.input"].read(length) if length > 0 else None
        except Exception:
            body = None

    try:
        req      = urllib.request.Request(url, data=body, headers=headers, method=method)
        response = urllib.request.urlopen(req, timeout=120)
        status   = f"{response.status} {response.reason}"
        resp_headers = list(response.headers.items())
        start_response(status, resp_headers)
        return [response.read()]

    except urllib.error.HTTPError as e:
        status       = f"{e.code} {e.reason}"
        resp_headers = list(e.headers.items())
        start_response(status, resp_headers)
        return [e.read()]

    except Exception as e:
        start_response("502 Bad Gateway", [("Content-Type", "text/plain")])
        return [f"Proxy error: {e}".encode()]