


def brand_logo_upload_path(instance, filename):
    """Generate upload path for brand logos"""
    return f'brands/logos/{instance.agency.name if instance.agency else "no_agency"}/{filename}'


def advertiser_logo_upload_path(instance, filename):
    """Generate upload path for advertiser logos"""
    return f'advertisers/logos/{instance.brand.name if instance.brand else "no_brand"}/{filename}'


def agency_logo_upload_path(instance, filename):
    """Generate upload path for agency logos"""
    return f'agencies/logos/{instance.name if instance.name else "no_name"}/{filename}'

def get_agency_stats(user=None):
    """
    Get comprehensive agency statistics.
    """
    from apps.agencies.models import Agency
    
    queryset = Agency.objects.all()
    if user and not user.is_superuser:
        queryset = queryset.filter(owner=user)
    
    stats = {
        'total_agencies': queryset.count(),
        'active_agencies': queryset.filter(is_active=True, is_deleted=False).count(),
        'inactive_agencies': queryset.filter(is_active=False, is_deleted=False).count(),
        'verified_agencies': queryset.filter(is_verified=True, is_deleted=False).count(),
        'featured_agencies': queryset.filter(is_featured=True, is_deleted=False).count(),
        'deleted_agencies': queryset.filter(is_deleted=True).count(),
    }
    
    return stats


def get_brand_stats(user=None):
    """
    Get comprehensive brand statistics.
    """
    from apps.agencies.models import Brand, Agency
    
    # Get user's agencies first
    agencies = Agency.objects.all()
    if user and not user.is_superuser:
        agencies = agencies.filter(owner=user)
    
    # Get brands from user's agencies
    brands = Brand.objects.filter(agency__in=agencies)
    
    stats = {
        'total_brands': brands.count(),
        'active_brands': brands.filter(status='active', is_deleted=False).count(),
        'inactive_brands': brands.filter(status='inactive', is_deleted=False).count(),
        'pending_brands': brands.filter(status='pending', is_deleted=False).count(),
        'suspended_brands': brands.filter(status='suspended', is_deleted=False).count(),
        'archived_brands': brands.filter(status='archived', is_deleted=False).count(),
        'featured_brands': brands.filter(is_featured=True, is_deleted=False).count(),
        'deleted_brands': brands.filter(is_deleted=True).count(),
        'total_agencies': agencies.count(),
    }
    
    return stats


def get_agency_context_data(agency):
    """
    Get additional context data for agency detail views.
    """
    context = {}
    
    # Get brand count
    try:
        from apps.agencies.models import Brand
        context['brands_count'] = Brand.objects.filter(agency=agency).count()
        context['brands'] = Brand.objects.filter(agency=agency).order_by('name')[:10]  # First 10 for display
    except:
        context['brands_count'] = 0
        context['brands'] = []
    
    # Get campaign count (if campaigns model exists)
    try:
        from apps.campaigns.models import Campaigns
        context['campaigns_count'] = Campaigns.objects.filter(agency=agency).count()
    except:
        context['campaigns_count'] = 0
    
    # Get team members count is already available via agency.team_members.count()
    
    return context
