"""
Translation and localization utilities.
"""
from django.conf import settings
from django.utils.translation import get_language


def get_language_currency_pair():
    """
    Get current language and its corresponding currency.
    Returns tuple: (language_code, currency_code)
    """
    current_language = get_language()
    lang_currency_map = getattr(settings, 'LANGUAGE_CURRENCY_MAPPING', {})
    currency = lang_currency_map.get(current_language, settings.DEFAULT_CURRENCY)
    return (current_language, currency)


def get_language_name(language_code):
    """
    Get the display name for a language code.
    """
    languages_dict = dict(settings.LANGUAGES)
    return languages_dict.get(language_code, language_code)


def get_preferred_language(request=None):
    """
    Determine the preferred language from the authenticated user or session.
    """
    if request is not None:
        if hasattr(request, 'user') and request.user.is_authenticated:
            return getattr(request.user, 'preferred_language', None) or request.session.get('django_language')
        return request.session.get('django_language')

    return get_language() or settings.LANGUAGE_CODE


def get_currency_symbol(currency_code):
    """
    Get the symbol for a currency code.
    """
    currency = settings.CURRENCIES.get(currency_code, {})
    return currency.get('symbol', currency_code)


def get_currency_name(currency_code):
    """
    Get the display name for a currency code.
    """
    currency = settings.CURRENCIES.get(currency_code, {})
    return currency.get('name', currency_code)


def get_language_options_for_template():
    """
    Get a list of language options formatted for template rendering.
    Each option includes language code, display name, and associated currency.
    """
    lang_currency_map = getattr(settings, 'LANGUAGE_CURRENCY_MAPPING', {})
    options = []
    
    for lang_code, lang_name in settings.LANGUAGES:
        currency_code = lang_currency_map.get(lang_code, settings.DEFAULT_CURRENCY)
        currency_symbol = get_currency_symbol(currency_code)
        
        options.append({
            'code': lang_code,
            'name': lang_name,
            'currency_code': currency_code,
            'currency_symbol': currency_symbol,
        })
    
    return options


def get_rtl_languages():
    """
    Get list of right-to-left languages.
    """
    return ['ar', 'he', 'ur', 'fa']


def is_language_rtl(language_code):
    """
    Check if a language uses right-to-left text direction.
    """
    return language_code in get_rtl_languages()
