# custom_filters.py
from django import template
from num2words import num2words
import calendar

register = template.Library()


@register.filter(name='number_to_words')
def number_to_words(number):
    try:
        return num2words(number)
    except (ValueError, NotImplementedError):
        return 'Invalid number'


def custom_date_format(value):
    year = value.year
    month = calendar.month_name[value.month]
    day = value.day

    ordinal_suffix = 'th'
    if 10 <= day % 100 <= 20:
        ordinal_suffix = 'th'
    else:
        suffixes = {1: 'st', 2: 'nd', 3: 'rd'}
        ordinal_suffix = suffixes.get(day % 10, 'th')

    return f"{day}{ordinal_suffix} {month} {year}"


register.filter('custom_date_format', custom_date_format)
