from __future__ import absolute_import

from pure_pagination import EmptyPage
from pure_pagination import Paginator
from django.shortcuts import render


def create_child_instance_from_parent(child_cls, parent_instance):
    """
    Create a child model instance from a parent instance
    """
    parent_cls = parent_instance.__class__
    field = child_cls._meta.get_ancestor_link(parent_cls).column

    child_instance = child_cls(**{
        field: parent_instance.pk
    })

    child_instance.__dict__.update(parent_instance.__dict__)
    child_instance.save()
    return child_instance


def render_paginate_list(request, object_list, template_name):
    """
    Render a paginated list of representatives
    """
    pagination_limits = (12, 24, 48, 96)
    num_by_page = request.GET.get('limit', unicode(pagination_limits[0]))
    num_by_page = int(num_by_page) if num_by_page.isdigit() else 1
    paginator = Paginator(object_list, num_by_page)
    number = request.GET.get('page', '1')
    number = int(number) if number.isdigit() else 1

    try:
        page = paginator.page(number)
    except EmptyPage:
        page = paginator.page(paginator.num_pages)

    context = {}
    context['paginator'] = paginator
    context['page'] = page
    context['object_list'] = context['page'].object_list
    context['pagination_limits'] = pagination_limits

    return render(
        request,
        template_name,
        context
    )