# encoding: utf-8

import sys, smtplib
from cgi import parse_qs, escape
#import yaml
import template
from template import Template, util
import re


class Contact(object):
    """ """

    config = {
        'INCLUDE_PATH':     ['/srv/wp1000038/web/docs/htdocs/tt'],
        'INTERPOLATE':      1,
        'POST_CHOMP':       0,
        #'PRE_PROCESS':      'header',
        'EVAL_PYTHON':      1,
    };


    def __init__(self):
        """ """
        self.tt = Template(self.config)
        self.stash = {}


    def getPostData(self, environ):
        try:
            request_body_size = int(environ['CONTENT_LENGTH'])
        except (TypeError, ValueError):
            request_body_size = 0
        request_body = environ['wsgi.input'].read(request_body_size)
        postDict = parse_qs(request_body)
        return postDict


#        self.stash['query'] = environ['QUERY_STRING']
#        for k,v in cgi.parse_qsl(environ['QUERY_STRING']):
#            form[k] = v
#            data += "[%s] %s" % (k,v)
#        for k in environ.keys():
#            data += "%s: %s\n" % (k, environ[k])


    def __call__(self, environ, start_response):
        """ """
        status = '200 OK'
        form = {}
        data = ""
        failure = False
        if environ['REQUEST_METHOD'] == 'POST':
            postData = self.getPostData(environ)
            self.stash['failure'] = ''
            self.stash['salutation'] = postData.get('salutation', [''])[0]
            self.stash['name'] = postData.get('name', [''])[0]
            if self.stash['name'] == '':
                failure = True
                self.stash['failure'] += 'Sie haben Ihren Namen nicht angegeben!<br />'
            self.stash['organization'] = postData.get('organization', [''])[0]
            self.stash['email'] = postData.get('email', [''])[0]
            patternEmail = re.compile('[a-zA-Z0-9+_\-\.]+@[0-9a-zA-Z][.-0-9a-zA-Z]*.[a-zA-Z]+')
            if not patternEmail.match(self.stash['email']):
                failure = True
                self.stash['failure'] += 'Ihre Emailadresse hat kein gültiges Format!<br />'
            self.stash['phone'] = postData.get('phone', [''])[0]
            if self.stash['phone'] == '':
                failure = True
                self.stash['failure'] += 'Sie haben keine Telefonnummer angegeben!<br />'
            self.stash['message'] = postData.get('message', [''])[0]
            if self.stash['message'] == '':
                failure = True
                self.stash['failure'] += 'Sie haben keine Nachricht angegeben!<br />'

            # send response mail to user
            #self.stash['sender'] = 'info@agentur-schnittstelle.de'
            if not failure:
                self.stash['sender'] = 'd.lucyga@gmx.de'
                self.stash['recipient'] = self.stash['email']
                self.stash['subject'] = 'Vielen Dank für Ihre Nachricht'
                message = self.tt.process('email_response.txt', self.stash)
                server = smtplib.SMTP('localhost')
                try:
                    server.sendmail(self.stash['sender'], self.stash['recipient'], message)
                except Exception:
                    self.stash['failure'] = message
                    failure = True
                server.quit()
            if not failure:
                self.stash['sender'] = self.stash['email']
                self.stash['recipient'] = 'd.lucyga@gmx.de'
                self.stash['subject'] = 'Nachricht per Kontaktformular - Lucyga'
                message = self.tt.process('email_request.txt', self.stash)
                server = smtplib.SMTP('localhost')
                try:
                    server.sendmail(self.stash['sender'], self.stash['recipient'], message)
                except Exception:
                    self.stash['failure'] = message
                    failure = True
                server.quit()
            if failure:
                data = self.tt.process('contact_failure.html', self.stash)
            else:
                data = self.tt.process('contact_success.html', self.stash)
        else:
            data = self.tt.process('contact_index.html', self.stash)
        response_headers = [('Content-type', 'text/html'), ('Content-Length', str(len(data)))]
        start_response(status, response_headers)
        return data

    def sendmail(self, sender, recipient, subject, message):
        self.stash['sender'] = sender
        self.stash['recipient'] = recipient
        self.stash['subject'] = subject
        self.stash['message'] = message
        message = self.tt.process('email.txt', self.stash)
        server = smtplib.SMTP('localhost')
        server.sendmail(sender, recipient, message)
        server.quit()


def application(environ, start_response):
    output = Contact()(environ, start_response)
    return [output]

