from django.views.generic import View
from django.shortcuts import redirect, render, get_object_or_404

from payments import get_payment_model, RedirectNeeded
from rules.contrib.views import PermissionRequiredMixin

from aleksis.core.views import RenderPDFView

from .models.invoice import Invoice


class GetInvoicePDF(PermissionRequiredMixin, RenderPDFView):

    permission_required = "tezor.can_print_invoice"

    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        invoice = Invoice.objects.get(id=self.kwargs["pk"])
        self.template_name = invoice.group.template_name
        context["invoice"] = invoice

        print(invoice.group.__dict__)
        return context


def payment_details(request, token):
    payment = get_object_or_404(get_payment_model(), token=token)

    try:
       form = payment.get_form(data=request.POST or None)
    except RedirectNeeded as redirect_to:
        return redirect(str(redirect_to))

    context = {
        "form": form,
        "payment": payment,
    }

    return render(request, "tezor/invoice/payment.html", context)