# -*- coding: utf-8 -*-

import datetime
import dingguo
import string
import email
import ioex
import re
import BeautifulSoup

def parse_order_confirmation_mail(mail):

    assert isinstance(mail, email.message.Message)

    html_mail = mail.get_payload()[0].get_payload()[1].get_payload(decode = True)

    doc = BeautifulSoup.BeautifulSoup(html_mail)

    order_attr = re.search(
            ur'Bestelldatum:(?P<date>\d+)'
                + ur'Benutzername:(?P<user>.*)'
                + ur'Name',
            doc.find(text = 'Bestelldatum:').findParent('table').text,
            re.UNICODE,
            ).groupdict()
    user = ''.join([c if (c in string.printable) else '' for c in order_attr['user']])
    order = dingguo.Order(
            customer_id = user,
            order_date = datetime.datetime.strptime(order_attr['date'], '%d%m%y'),
            order_id = u'%s-%s' % (user, order_attr['date']),
            platform = u'hm',
            )

    for article_tag in [t.findParents('tr')[2] for t in doc.findAll(text = 'Art.-Nr.:')]:
        article_subtags = article_tag.findAll(recursive = False)
        article = re.search(
            ur'Art.-Nr.:(?P<id>[\d-]+)'
                + ur'Beschreibung:(?P<label>.*)'
                + ur'Größe:(?P<size>.*)'
                + ur'Farbe:(?P<color>[^\d]+)',
            article_subtags[1].text,
            re.UNICODE,
            ).groupdict()
        order.items.append(dingguo.Article(
            color = article['color'],
            name = article['label'],
            price_brutto = dingguo.Sum(
                float(article_subtags[3].text.replace(',', '.')), 
                u'EUR',
                ),
            product_id = article['id'],
            quantity = int(article_subtags[2].text),
            reseller = u'H&M',
            size = article['size'],
            ))

    return [order]