from django.conf import settings
from django.utils import timezone
from django.utils.translation import get_language, to_locale
from shop.models import BanshixContact, Category, Discount
from .utils import get_currency, get_currency_symbol
import json


def product_category(request):
    product_category=Category.objects.all()
    return {'product_category': product_category}


def cart_count(request):
    cart = request.session.get('cart', {})
    total = sum(item['quantity'] for item in cart.values())
    return {'cart_count': total}


def currency(request):
    currency_code = request.session.get('currency', settings.DEFAULT_CURRENCY)
    currency = settings.CURRENCIES.get(currency_code)
    
    # Convert CURRENCIES dict to JSON for JavaScript
    currencies_json = json.dumps(settings.CURRENCIES)

    return {
        'current_currency': currency_code,
        'currency_symbol': currency['symbol'],
        'currency_rate': currency['rate'],
        'currencies': settings.CURRENCIES,
        'currencies_json': currencies_json,
    }


def language(request):
    """
    Context processor to provide language information and all available languages.
    Supports RTL languages (Arabic, Hebrew) and provides language metadata.
    """
    current_language = get_language()
    available_languages = settings.LANGUAGES
    language_currency_map = getattr(settings, 'LANGUAGE_CURRENCY_MAPPING', {})
    
    # Detect if current language is RTL (Right-to-Left)
    rtl_languages = ('ar', 'he', 'fa', 'ur')  # Arabic, Hebrew, Persian, Urdu
    is_rtl = current_language.split('-')[0] in rtl_languages
    preferred_language = current_language
    if request.user.is_authenticated:
        preferred_language = getattr(request.user, 'preferred_language', current_language) or current_language
    
    return {
        'current_language': current_language,
        'preferred_language': preferred_language,
        'LANGUAGE_CODE': current_language,
        'available_languages': available_languages,
        'language_currency_map': language_currency_map,
        'LANGUAGE_BIDI': is_rtl,
    }


def special_discounts(request):
    now = timezone.now()
    discounts = Discount.objects.filter(
        is_active=True,
        start_date__lte=now,
        end_date__gte=now
    ).order_by('-created_at')[:5]
    return {'special_discounts': discounts}

def banshix_socials(request):
    banshix_socials = BanshixContact.objects.first()
    return {
            'banshix_socials': banshix_socials,
    }