"""
Template tags for site branding and price formatting.
"""
from django import template
from django.utils.safestring import mark_safe

register = template.Library()


@register.simple_tag(takes_context=True)
def site_name(context):
    settings_obj = context.get('site_settings')
    if settings_obj:
        return settings_obj.institute_name
    return 'Academy'


@register.simple_tag(takes_context=True)
def currency_symbol(context):
    settings_obj = context.get('site_settings')
    if settings_obj:
        return settings_obj.currency_symbol
    return 'PKR'


@register.simple_tag(takes_context=True)
def format_price(context, amount, free_label='Free'):
    """Render price with currency, or Free when amount is 0."""
    try:
        value = float(amount or 0)
    except (TypeError, ValueError):
        value = 0
    if value <= 0:
        return free_label
    settings_obj = context.get('site_settings')
    symbol = settings_obj.currency_symbol if settings_obj else 'PKR'
    # Whole numbers without decimals when possible
    if value == int(value):
        formatted = f'{int(value):,}'
    else:
        formatted = f'{value:,.2f}'
    return f'{symbol} {formatted}'


@register.filter
def money(amount, symbol='PKR'):
    """Filter: {{ course.price|money:site_settings.currency_symbol }}"""
    try:
        value = float(amount or 0)
    except (TypeError, ValueError):
        value = 0
    if value <= 0:
        return mark_safe('<span class="text-success fw-semibold">Free</span>')
    if value == int(value):
        formatted = f'{int(value):,}'
    else:
        formatted = f'{value:,.2f}'
    return f'{symbol} {formatted}'
