# -*- coding: utf-8 -*-
"""
Кастомные templatetags для работы с фильтрами django-filter
"""

from django import template
from django.utils.http import urlencode

register = template.Library()


@register.simple_tag(takes_context=True)
def param_replace(context, **kwargs):
    """
    Заменяет или добавляет GET-параметры, сохраняя существующие

    Использование в шаблоне:
    {% load filter_tags %}
    <a href="?{% param_replace page=2 %}">Страница 2</a>

    Это сохранит все текущие фильтры и заменит только параметр page
    """
    query = context['request'].GET.copy()

    for key, value in kwargs.items():
        if value is not None:
            query[key] = value
        elif key in query:
            query.pop(key)

    return query.urlencode()


@register.simple_tag(takes_context=True)
def get_filter_url(context, **kwargs):
    """
    Генерирует полный URL с параметрами фильтров

    Использование:
    {% get_filter_url status='confirmed' page=1 %}
    """
    return '?' + param_replace(context, **kwargs)


@register.filter
def get_verbose_name(instance, field_name):
    """
    Получить verbose_name поля модели

    Использование:
    {{ order|get_verbose_name:'status' }}
    """
    return instance._meta.get_field(field_name).verbose_name
