import re
import unicodedata
from typing import Optional


def generate_slug(text: str, max_length: int = 100) -> str:
    """
    Генерирует URL-слаг из текста.
    
    Args:
        text: Исходный текст
        max_length: Максимальная длина слага
    
    Returns:
        URL-слаг
    """
    if not text:
        return ""
    
    # Нормализуем Unicode (убираем диакритические знаки)
    text = unicodedata.normalize('NFKD', text)
    
    # Переводим в нижний регистр
    text = text.lower()
    
    # Заменяем пробелы и специальные символы на дефисы
    text = re.sub(r'[^\w\s-]', '', text)
    text = re.sub(r'[-\s]+', '-', text)
    
    # Убираем дефисы в начале и конце
    text = text.strip('-')
    
    # Обрезаем до максимальной длины
    if len(text) > max_length:
        text = text[:max_length].rstrip('-')
    
    return text


def make_slug_unique(slug: str, existing_slugs: list[str], tenant_id: int) -> str:
    """
    Делает слаг уникальным, добавляя суффикс если необходимо.
    
    Args:
        slug: Базовый слаг
        existing_slugs: Список существующих слогов
        tenant_id: ID тенанта для уникальности
    
    Returns:
        Уникальный слаг
    """
    if not slug:
        return f"template-{tenant_id}-{len(existing_slugs) + 1}"
    
    base_slug = slug
    counter = 1
    
    while f"{base_slug}-{counter}" in existing_slugs:
        counter += 1
    
    if counter > 1:
        return f"{base_slug}-{counter}"
    
    return base_slug
