from django import template

register = template.Library()

@register.filter
def startswith(text, prefix):
    """Return True if text starts with the given prefix."""
    if not isinstance(text, str):
        return False
    return text.startswith(prefix)


@register.filter
def get_item(mapping, key):
    """Dict-like get in templates: mapping|get_item:key -> value (or empty list)."""
    try:
        return mapping.get(key)
    except Exception:
        return None


@register.filter
def add_class(field, css_class):
    """Render a form field with an extra CSS class.

    Usage in templates: {{ field|add_class:"input" }}
    """
    try:
        widget = field.field.widget
        existing = widget.attrs.get("class", "")
        merged = (existing + " " + css_class).strip() if existing else css_class
        # Preserve any existing widget attrs while adding/overriding class
        attrs = {**widget.attrs, "class": merged}
        return field.as_widget(attrs=attrs)
    except Exception:
        # Fallback to default rendering if anything unexpected occurs
        return field


@register.filter
def currency_label(code: str) -> str:
    """Map currency codes to display labels.

    - XOF/XAF -> 'F CFA'
    - others  -> unchanged code
    """
    try:
        c = (code or "").upper()
        if c in ("XOF", "XAF"):
            return "F CFA"
        return c
    except Exception:
        return code
