# -*- mode: python; coding: utf-8 -*-
# Re2o est un logiciel d'administration développé initiallement au rezometz. Il
# se veut agnostique au réseau considéré, de manière à être installable en
# quelques clics.
#
# Copyright © 2018  Hugo Levy-Falk
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

import os

from django.template.loader import get_template
from django.core.mail import EmailMessage

from .tex import create_pdf
from preferences.models import AssoOption, GeneralOption
from re2o.settings import LOGO_PATH
from re2o import settings


def find_payment_method(payment):
    """Finds the payment method associated to the payment if it exists."""
    from cotisations.payment_methods import PAYMENT_METHODS
    for method in PAYMENT_METHODS:
        try:
            o = method.PaymentMethod.objects.get(payment=payment)
            return o
        except method.PaymentMethod.DoesNotExist:
            pass
    return None


def send_mail_invoice(invoice):
    """Creates the pdf of the invoice and sends it by email to the client"""
    purchases_info = []
    for purchase in invoice.vente_set.all():
        purchases_info.append({
            'name': purchase.name,
            'price': purchase.prix,
            'quantity': purchase.number,
            'total_price': purchase.prix_total
        })

    ctx = {
        'paid': True,
        'fid': invoice.id,
        'DATE': invoice.date,
        'recipient_name': "{} {}".format(
            invoice.user.name,
            invoice.user.surname
        ),
        'address': invoice.user.room,
        'article': purchases_info,
        'total': invoice.prix_total(),
        'asso_name': AssoOption.get_cached_value('name'),
        'line1': AssoOption.get_cached_value('adresse1'),
        'line2': AssoOption.get_cached_value('adresse2'),
        'siret': AssoOption.get_cached_value('siret'),
        'email': AssoOption.get_cached_value('contact'),
        'phone': AssoOption.get_cached_value('telephone'),
        'tpl_path': os.path.join(settings.BASE_DIR, LOGO_PATH)
    }

    pdf = create_pdf('cotisations/factures.tex', ctx)
    template = get_template('cotisations/email_invoice')

    ctx = {
        'name': "{} {}".format(
            invoice.user.name,
            invoice.user.surname
        ),
        'contact_mail': AssoOption.get_cached_value('contact'),
        'asso_name': AssoOption.get_cached_value('name')
    }

    mail = EmailMessage(
        'Votre facture / Your invoice',
        template.render(ctx),
        GeneralOption.get_cached_value('email_from'),
        [invoice.user.get_mail],
        attachments=[('invoice.pdf', pdf, 'application/pdf')]
    )
    mail.send()