"""Shared formatting utilities for traffic, price, and period display.""" import html def safe_html_name(name: str | None) -> str: """HTML-escape a display name for Telegram HTML messages.""" return html.escape(name or '') def user_html_link(user) -> str: """Build an HTML-safe clickable user link for Telegram messages.""" safe = safe_html_name(user.full_name) if getattr(user, 'telegram_id', None): return f'{safe}' return f'{safe}' def format_traffic(gb: int) -> str: """Форматирует трафик.""" if gb == 0: return 'Безлимит' return f'{gb} ГБ' def format_price_kopeks(kopeks: int, compact: bool = False) -> str: """Форматирует цену из копеек в рубли.""" rubles = kopeks / 100 if compact: # Компактный формат - округляем до рублей return f'{int(round(rubles))}₽' if rubles == int(rubles): return f'{int(rubles)} ₽' return f'{rubles:.2f} ₽' def format_period(days: int) -> str: """Форматирует период.""" mod100 = days % 100 mod10 = days % 10 if 11 <= mod100 <= 19: word = 'дней' elif mod10 == 1: word = 'день' elif 2 <= mod10 <= 4: word = 'дня' else: word = 'дней' return f'{days} {word}'