from django.core.paginator import Paginator


def user_initials(user):
    name = user.get_full_name().strip()
    if name:
        parts = name.split()
        if len(parts) >= 2:
            return (parts[0][0] + parts[-1][0]).upper()
        return parts[0][:2].upper()
    return user.username[:2].upper()


def admin_sidebar_context(user):
    from home.models import ContactMessage
    from testimonials.models import Testimonial

    return {
        'user_initials': user_initials(user),
        'pending_testimonials': Testimonial.objects.filter(is_approved=False).count(),
        'unread_messages': ContactMessage.objects.filter(is_read=False).count(),
    }


def admin_render(request, template, admin_nav, **extra):
    from django.shortcuts import render

    context = {
        'admin_nav': admin_nav,
        **admin_sidebar_context(request.user),
        **extra,
    }
    return render(request, template, context)


def paginate_queryset(queryset, request, per_page=20):
    paginator = Paginator(queryset, per_page)
    page_obj = paginator.get_page(request.GET.get('page'))
    query_params = request.GET.copy()
    query_params.pop('page', None)
    query_string = query_params.urlencode()
    page_range = paginator.get_elided_page_range(
        page_obj.number,
        on_each_side=1,
        on_ends=1,
    )
    return page_obj, query_string, page_range


def paginate_for_admin(queryset, request, per_page=20):
    page_obj, query_string, page_range = paginate_queryset(queryset, request, per_page)
    return {
        'page_obj': page_obj,
        'query_string': query_string,
        'page_range': page_range,
    }
