from django import template
from task_management.models import StaffProfile

register = template.Library()


@register.filter
def has_perm(user, perm_key):
    """Check if user's staff profile has the given permission (superusers: all)."""
    if getattr(user, 'is_superuser', False):
        return True
    try:
        return user.staff_profile.has_perm(perm_key)
    except StaffProfile.DoesNotExist:
        return False


@register.filter
def get_item(dictionary, key):
    if isinstance(dictionary, dict):
        return dictionary.get(key, [])
    return []


@register.filter
def priority_color(priority):
    colors = {
        'low': '#94a3b8',
        'medium': '#3b82f6',
        'high': '#f59e0b',
        'urgent': '#ef4444',
    }
    return colors.get(priority, '#94a3b8')


@register.filter
def status_color(status):
    colors = {
        'backlog': '#94a3b8',
        'todo': '#3b82f6',
        'in_progress': '#8b5cf6',
        'review': '#f59e0b',
        'completed': '#10b981',
        'planning': '#94a3b8',
        'active': '#3b82f6',
        'on_hold': '#f59e0b',
        'cancelled': '#ef4444',
    }
    return colors.get(status, '#94a3b8')


@register.filter
def field(form, name):
    try:
        return form[name]
    except Exception:
        return ''


@register.filter
def initials(user):
    try:
        return user.staff_profile.initials
    except StaffProfile.DoesNotExist:
        pass
    first = user.first_name[:1] if user.first_name else ''
    last = user.last_name[:1] if user.last_name else ''
    return (first + last).upper() or user.username[:2].upper()


@register.filter
def avatar_color(user):
    try:
        return user.staff_profile.resolved_avatar_color
    except StaffProfile.DoesNotExist:
        return '#3b82f6'


@register.simple_tag
def kanban_column_label(status):
    labels = {
        'backlog': 'Backlog',
        'todo': 'To Do',
        'in_progress': 'In Progress',
        'review': 'Review',
        'completed': 'Completed',
    }
    return labels.get(status, status)


@register.simple_tag
def kanban_column_icon(status):
    icons = {
        'backlog': '📋',
        'todo': '📌',
        'in_progress': '🔨',
        'review': '👁',
        'completed': '✅',
    }
    return icons.get(status, '📋')
