from django.http import JsonResponse, HttpResponseNotAllowed
from django.shortcuts import get_object_or_404, render, resolve_url

from contacts.core.models import Contact


def home(request):
    return render(request, 'core/base.html')


def contacts(request):
    contacts = [_contact_summary(contact) for contact in Contact.objects.all()]
    return JsonResponse(dict(contacts=contacts))


def contact_detail(request, pk):
    if request.method == 'POST':
        data = (request.POST.get(key) for key in ('name', 'fone', 'email'))
        contact = Contact.objects.get(pk=pk)
        contact.name, contact.fone, contact.email = data
        contact.save()
    else:
        contact = get_object_or_404(Contact, pk=pk)

    response = dict(
        name=contact.name,
        avatar=contact.avatar(),
        email=contact.email,
        phone=contact.fone,
        url=resolve_url('contact-details', pk=contact.pk)
    )
    return JsonResponse(response)


def contacts_new(request):
    if request.method != 'POST':
        return HttpResponseNotAllowed(('POST',))

    data = {
        key: value for key, value in request.POST.items()
        if key in ('name', 'fone', 'email')
    }
    contact = Contact.objects.create(**data)
    response = dict(
        name=contact.name,
        avatar=contact.avatar(),
        email=contact.email,
        phone=contact.fone
    )

    return JsonResponse(response, status=201)


def _contact_summary(contact):
    return dict(
        name=contact.name,
        avatar=contact.avatar(),
        url=resolve_url('contact-details', pk=contact.pk)
    )