"""
Template tags для проверки разрешений пользователя.

Usage в шаблонах:
    {% load permission_tags %}
    
    {% if user|has_perm:'source_create' %}
        <button>Создать</button>
    {% endif %}
    
    {% has_perm user 'source_create' as can_create %}
    {% if can_create %}
        ...
    {% endif %}
"""
from django import template
from ..permissions import has_permission, get_user_permissions

register = template.Library()


@register.filter(name='has_perm')
def has_perm_filter(user, permission_code):
    """
    Фильтр для проверки разрешения.
    
    Usage:
        {% if user|has_perm:'source_create' %}
            ...
        {% endif %}
    """
    return has_permission(user, permission_code)


@register.simple_tag
def has_perm(user, permission_code):
    """
    Тег для проверки разрешения с сохранением в переменную.
    
    Usage:
        {% has_perm user 'source_create' as can_create %}
        {% if can_create %}
            ...
        {% endif %}
    """
    return has_permission(user, permission_code)


@register.simple_tag
def user_permissions(user):
    """
    Возвращает список разрешений пользователя.
    
    Usage:
        {% user_permissions user as perms %}
        {% if 'source_create' in perms %}
            ...
        {% endif %}
    """
    return get_user_permissions(user)


@register.inclusion_tag('mainapp/components/_permission_button.html')
def permission_button(user, permission_code, **kwargs):
    """
    Рендерит кнопку только если у пользователя есть разрешение.
    
    Usage:
        {% permission_button user 'source_create' 
           url='mainapp:source_create' 
           class='btn btn-success btn-sm'
           icon='bi-plus-circle'
           text='Создать' %}
    """
    return {
        'has_permission': has_permission(user, permission_code),
        'url': kwargs.get('url', ''),
        'btn_class': kwargs.get('class', 'btn btn-primary btn-sm'),
        'icon': kwargs.get('icon', ''),
        'text': kwargs.get('text', ''),
        'title': kwargs.get('title', ''),
        'onclick': kwargs.get('onclick', ''),
        'data_attrs': kwargs.get('data_attrs', {}),
    }



@register.filter(name='get_item')
def get_item(dictionary, key):
    """
    Получает элемент из словаря по ключу.
    
    Usage:
        {{ my_dict|get_item:key }}
    """
    if dictionary is None:
        return None
    return dictionary.get(key, [])
