#!/usr/bin/env python
#-*- coding: utf-8 -*-
# kate: space-indent on; indent-width 4; replace-tabs on;
#
import os, os.path, sys
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
import re, time, base64
from collections import defaultdict
from log_utils import writelog
from common import doRequest, requestService


def prepare_complaint_query(otrs_query, ip):
    params = defaultdict(str, re.findall("([^\?&=]*)=([^\?&=]*)", otrs_query))
    stid = params["stid"]
    content, code = requestService("https://storage.mail.yandex.net:4443/gate/get/%s?raw=&service=so" % stid)
    if content:
        if re.match(r'<\?xml ', content):
            content = re.sub(r'(?s)^<\?xml.*?</message>\s+(.*)$', r'\1', content)
        params["suid"] = "999999999999999"
        params["login"] = "999OTRS"
        params["karma"] = "0"
        params["karma_status"] = "6000"
        params["mdb"] = "mdb350"
        params["folder"] = "0JLRhdC-0LTRj9GJ0LjQtQ"
        params["seen"] = "yes"
        params["data"] = str(int(time.time()))
    else:
        return ""
    header = content.split("\n\n")[0].strip()
    header += "\nX-Yandex-TimeMark: %d" % int(time.time())
    params["mail"] = base64.urlsafe_b64encode(header).replace("=", "")
    params["wmi"] = ip
    return "&".join(map(lambda (k, v): "%s=%s" % (k, v), params.iteritems()))


request_uri = os.environ.get("REQUEST_URI")
ip = os.environ.get("REMOTE_ADDR")
writelog("IP=%s, RequestUri=%s" % (ip, request_uri))

query = prepare_complaint_query(request_uri, ip)
if query:
    writelog("http://complaint.so.yandex.net:8700/check?%s" % query)
    content = doRequest("http://complaint.so.yandex.net:8700/check?%s" % query, "Send complaint to complaint.so.yandex.net")
    if content:
        writelog("Complaint sent to complaint.so.yandex.net")
    else:
        writelog("Error while sending complaint to complaint.so.yandex.net")
else:
    writelog("Attempt to send complaint to complaint.so.yandex.net: No message found in mulca")

print "Content-Type: text/plain"
print
