import os
import time
import io
import traceback
import subprocess
import json
import sys
import pprint


sys.path.insert(0, os.path.dirname(__file__))


def application(environ, start_response):
    t4 = int(environ.get('CONTENT_LENGTH', '0'))
    t3 = environ['wsgi.input'].read(t4)
    def op1(rh):
        t5 = rh.split('_')
        t6 = ['%s%s' % (o[0].upper(), o[1:].lower()) for o in t5]
        return '-'.join(t6)
    t2 = {
        op1(k[5:]) : v
        for k, v in environ.items()
        if k.startswith('HTTP_')
    }
    for k, v in environ.items():
        if k in [
            'CONTENT_TYPE',
        ]:
            t2[op1(k)] = v
    t7 = dict(
        uri=environ['REQUEST_URI'],
        method=environ['REQUEST_METHOD'],
        protocol=environ['SERVER_PROTOCOL'],
    )
    try:
        t17 = [
            'curl',
            'http://127.0.0.1:9050%s' % t7['uri'],
            *sum([
                ['--header', '%s: %s' % (k, v)]
                for k, v in t2.items()
            ], []),
            '-X', t7['method'],
            '-d', '@-',
            '--max-filesize', '%d' % (60 * 1024 * 1024),
            '-o', '1.dat',
            '-v',
            '-q',
        ]
        with io.open('1.json', 'w') as f:
            f.write(json.dumps(dict(t17=t17, t3=t3.decode('utf-8'))))
        with subprocess.Popen(
            t17, stderr=subprocess.PIPE, stdout=subprocess.PIPE, stdin=subprocess.PIPE
        ) as p:
            p.stdin.write(t3)
            p.stdin.flush()
            p.stdin.close()
            try:
                p.wait(20)
                response_headers = [
                    o[2:]
                    for o in p.stderr.read().decode('utf-8').splitlines()
                    if o.startswith('< ')
                ]
                t9 = '\r\n'.join(response_headers)
                while True:
                    try:
                        with io.open('1.dat', 'rb') as f:
                            t10 = f.read()
                        break
                    except:
                        time.sleep(0.05)
            finally:
                p.terminate()
    except:
        t9 = 'FUCK SHIT\r\n'
        t10 = traceback.format_exc().encode('utf-8')

    if not any([o.startswith('Content-Length') for o in t9]):
        t9 = t9.replace('Transfer-Encoding: chunked\r\n', '')
        t9 += 'Content-Length: %d\r\n' % len(t10)
    t11 = t9.encode('utf-8') + t10
    response += pprint.pformat(dict(t9=t9, t10=t10, t11=t11))
    t13 = t9.splitlines()[0]
    t14 = t13.find(' ')
    t15 = t13[t14 + 1:]
    t16 = [(o[:o.find(':')], o[o.find(':') + 1:]) for o in t9.splitlines()[1:]]
    if False:
        t1 = start_response('200 OK', [('Content-Type', 'text/plain')])
        t1(t15)
        t1(json.dumps(t16))
        t1(json.dumps(t17))
        t1(t10)
    else:
        t1 = start_response(t15, t16)
        t1(t10)
    return []