"""Readable web addresses for Bangla tags.

Django's slug maker drops Bangla vowel signs ("হারিয়ে যাওয়া পেশা" → "হরয-যওয-পশ").
For tags written in Bangla we keep the full spelling, joining words with dashes.
"""
import re

from django.db.models.signals import pre_save
from django.dispatch import receiver
from taggit.models import Tag

BANGLA = re.compile(r'[ঀ-৿]')


def bangla_slug(name):
    slug = re.sub(r'[\s/?#%&]+', '-', name.strip()).strip('-')
    return slug[:100]


@receiver(pre_save, sender=Tag)
def keep_bangla_spelling(sender, instance, **kwargs):
    if instance.name and BANGLA.search(instance.name):
        base = bangla_slug(instance.name)
        slug, n = base, 2
        while Tag.objects.filter(slug=slug).exclude(pk=instance.pk).exists():
            slug, n = f'{base}-{n}', n + 1
        instance.slug = slug
