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

import BeautifulSoup
import datetime
import dingguo
import email
import re

def parse_order_confirmation_mail(mail):

    assert isinstance(mail, email.message.Message)

    doc = BeautifulSoup.BeautifulSoup(
        mail.get_payload()[1].get_payload(decode = True).decode('utf-8')
        )
    
    if doc.find(text = re.compile(ur'Thomann')) is None:
        raise Exception('no thomann order confirmation')
   
    order = dingguo.Order(
        customer_id = doc.find(text = re.compile(ur'Kundennummer')).parent.nextSibling.text,
        order_id = doc.find(text = re.compile(ur'Auftragsnummer')).parent.nextSibling.text,
        order_date = datetime.datetime.strptime(
                doc.find(text = re.compile(ur'Auftragsdatum')).parent.nextSibling.text,
                '%d.%m.%Y %H:%M',
                ).date(),
        platform = u'thomann',
        )
    
    for product_id_label_tag in doc.findAll(text = re.compile(ur'Artikelnummer')):
        article_tag = product_id_label_tag.findParents('td')[1]
        name_quantity_tag = article_tag.find('strong')
        quantity, name = re.match(ur'(\d)x (.*)', name_quantity_tag.text).groups()
        currency, price = re.match(
                ur'(.) (\d+,\d+)', 
                product_id_label_tag.parent.nextSibling.text,
                ).groups()
        order.items.append(dingguo.Article(
            features = name_quantity_tag.parent.nextSibling.text,
            name = name, 
            price_brutto = dingguo.Sum(float(price.replace(',', '.')), currency),
            product_id = product_id_label_tag.nextSibling.text,
            quantity = int(quantity),
            ))

    return [order]