#Django core bits
from django.shortcuts import render, get_object_or_404
from django.template.loader import render_to_string
from django.template import RequestContext
from django.contrib.auth.decorators import login_required, permission_required
from django.contrib.sites.models import Site
from django.conf import settings
from django.http import HttpResponseRedirect, Http404, HttpResponse
from django.core.urlresolvers import reverse
from django.contrib import messages

from datetime import datetime,date,time
from dateutil.relativedelta import relativedelta

import pdfcrowd,random,csv,string

# Forms
from modules.members.adminforms import *

# Models
from modules.members.models import *
from modules.payments.models import *

from modules.members.functions import *
from modules.core.functions import *
from modules.members.signals import *


@permission_required('admin_users.can_access_members')
def members_pending(request):

    pending_members = Member.objects.filter(user_type='member',complete=True,approved=False).order_by('-user__date_joined')

    return render(request,'admin/members/approval/pending_members.html',{'pending_members':pending_members})

@permission_required('admin_users.can_access_members')
def members_pending_mark_paid(request,member_id):

    member = get_object_or_404(Member,id=member_id,complete=True,paid=False)
    today = date.today()

    total = member.get_registration_fee()
    #if member.donation_amount:
    #    amount_paid = total + member.donation_amount
    #else:
    amount_paid = total

    receipt_name = '%s Membership Subscription (%s)' % (settings.WEBSITE_NAME,today.strftime('%B %Y'))
    receipt = Receipt(member=member,name=receipt_name,start_date=today,amount_paid=amount_paid,payment_type=member.payment_type)
    receipt.unique_key = random_string_unique(20,Receipt,'unique_key')
    receipt.save()

    try:
        client = pdfcrowd.Client("calmdigital", "dc33e7c4525620565185d0a00d90b8f0")
        client.setPageMargins('50','50','0','50')
        client.setFooterHtml('<p style="font-size:12px; text-align:center;">The Society for Vascular Technology of Great Britain and Ireland %s</p>' % (date.today().strftime('%d/%m/%Y')))
        output_file = open(os.path.join(settings.MEDIA_ROOT, 'members/receipts/membership_payment_%s.pdf' % (receipt.id)), 'wb')
        html = render_to_string('members/receipts/view-receipt-pdf.html',{'receipt':receipt},context_instance=RequestContext(request))
        client.convertHtml(html,output_file)
        output_file.close()
    except:
        pass
    receipt.file = 'members/receipts/membership_payment_%s.pdf' % (receipt.id)
    receipt.save()

    messages.success(request,'Member Marked as Paid')

    member_invoice_paid.send(sender=None,request=request,member=member,receipt=receipt)

    member.paid = True
    member.save()

    return HttpResponseRedirect(reverse('admin_members_pending'))

@permission_required('admin_users.can_access_members')
def members_pending_download(request):

    pending_members = Member.objects.filter(user_type='member',complete=True,approved=False)
    response = export_members(request,pending_members,referrers=True)

    return response

@permission_required('admin_users.can_access_members')
def members_pending_approve(request,member_id):

    member = get_object_or_404(Member,id=member_id,complete=True,approved=False)

    #try:
    member.approved = True
    member.save()

    total = member.get_registration_fee()
    today = date.today()
    start_date = today
    member_type = member.member_type
    end_date = start_date+relativedelta(months=+12,days=-1)

    member.expiry_date = end_date
    member.save()

    subscription_name = '%s Membership Subscription (%s)' % (member_type.name,start_date.strftime('%B %Y'))
    invoice_to_name = '%s %s %s' % (member.get_title_display(),member.given_name,member.surname)

    member_subscription = MemberSubscription(
        member=member,
        member_type = member.member_type,
        subscription= subscription_name,
        amount= total,
        discount=0,
        total= total,
        invoice_to=invoice_to_name,
        status='current',
        start_date=today,
        expiry_date=member.expiry_date,
        invoice_created=today)

    member_subscription.save()

    #create certificate pdf
    certificate = Certificate(member=member,start_date=member_subscription.start_date,end_date=member_subscription.expiry_date)
    certificate.save()

    try:
        client = pdfcrowd.Client("calmdigital", "dc33e7c4525620565185d0a00d90b8f0")
        client.setPageMargins('50','50','0','50')
        output_file = open(os.path.join(settings.MEDIA_ROOT, 'members/certificates/membership_certificate_%s.pdf' % (certificate.id)), 'wb')
        html = render_to_string('members/certificates/view-cert-pdf.html',{'certificate':certificate},context_instance=RequestContext(request))
        client.convertHtml(html,output_file)
        output_file.close()
    except:
        pass

    certificate.file = 'members/certificates/membership_certificate_%s.pdf' % (certificate.id)
    certificate.save()

    member_admin_approved.send(sender=None, request=request, member=member, certificate=certificate)

    messages.success(request, 'Member has been approved')

    #except:
    #    member.approved = False
    #    member.save()
    #    messages.error(request,'Could not approve member')

    return HttpResponseRedirect(reverse('admin_members_pending'))
