# Django core bits
from django.shortcuts import get_object_or_404, render
from django.contrib.auth.decorators import permission_required
from django.http import HttpResponseRedirect, HttpResponse
from django.contrib import messages
from django.core.urlresolvers import reverse

import csv

# Models
from models import Submission, SubmissionType
from forms import SubmissionTypeForm


@permission_required('admin_users.can_access_contact')
def submissions(request):

    submissions = Submission.objects.all().order_by('-date_sent')

    return render(request, 'admin/contact/contact.html',{'submissions': submissions})


@permission_required('admin_users.can_access_contact')
def download_submissions(request):

    submissions = Submission.objects.all().order_by('-date_sent')

    # Create the HttpResponse object with the appropriate CSV header.
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = "attachment; filename=contact-submissions.csv"

    writer = csv.writer(response)

    writer.writerow(['Name', 'Email Address', 'Telephone', 'Membership Number', 'Type', 'Message', 'Postcode', 'Mailing List', 'Created'])

    for submission in submissions:

        if submission.mailing_list:
            mailing_list = 'Yes'
        else:
            mailing_list = 'No'

        writer.writerow([unicode(s).encode("utf-8") for s in (submission.name, submission.email, submission.telephone, submission.membership_number, submission.type, submission.message, submission.postcode, mailing_list, submission.date_sent)])

    return response


@permission_required('admin_users.can_access_contact')
def view_submission(request, submissionid):

    submission = get_object_or_404(Submission, id=submissionid)

    return render(request, 'admin/contact/submission.html', {'submission': submission})


@permission_required('admin_users.can_access_contact')
def delete_submission(request, submissionid):

    submission = get_object_or_404(Submission, id=submissionid)

    submission.delete()

    return HttpResponseRedirect(reverse('admin_contact'))


@permission_required('admin_users.can_access_contact')
def types(request):

    types = SubmissionType.objects.all()

    return render(request, 'admin/contact/types/types.html', {'types': types})


def add_type(request):

    type_form = SubmissionTypeForm()

    if request.POST:
        type_form = SubmissionTypeForm(request.POST)

        if type_form.is_valid():
            type_form.save()
            messages.success(request, 'Type Created')
            return HttpResponseRedirect(reverse('admin_contact_types'))

    return render(request, 'admin/contact/types/add-type.html', {'type_form': type_form})


def edit_type(request, type_id):

    type = get_object_or_404(SubmissionType, id=type_id)
    type_form = SubmissionTypeForm(instance=type)

    if request.POST:
        type_form = SubmissionTypeForm(request.POST, instance=type)

        if type_form.is_valid():
            type_form.save()
            messages.success(request, 'Type Updated')
            return HttpResponseRedirect(reverse('admin_contact_types'))

    return render(request, 'admin/contact/types/edit-type.html', {'type': type, 'type_form': type_form})


def delete_type(request, type_id):

    type = get_object_or_404(SubmissionType, id=type_id)

    type.delete()
    messages.success(request, 'Type Deleted')

    return HttpResponseRedirect(reverse('admin_contact_types'))
