"""Creative Management Views

Django views for creative asset management, processing, and optimization.
Provides both API endpoints and traditional web views for creative operations.

Features:
- Creative CRUD operations
- File upload and processing
- Approval workflows
- Performance tracking
- Template management
- Compliance checking
- A/B testing
- Bulk operations

API Endpoints:
- CreativeViewSet: Full CRUD for creatives
- CreativeVersionViewSet: Version management
- CreativeTemplateViewSet: Template operations
- CreativeApprovalViewSet: Approval workflow
- CreativePerformanceViewSet: Performance data

Web Views:
- Creative list and detail views
- Upload and processing views
- Approval workflow views
- Performance dashboard
- Template management

AJAX Endpoints:
- File upload handling
- Processing status
- Approval actions
- Performance data
- Search and filtering
"""

import json
import os
from datetime import datetime, timedelta
from decimal import Decimal

from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib import messages
from django.http import JsonResponse, HttpResponse, Http404
from django.views.generic import (
    ListView, DetailView, CreateView, UpdateView, DeleteView
)
from django.views.decorators.http import require_http_methods
from django.views.decorators.csrf import csrf_exempt
from django.core.paginator import Paginator
from django.db.models import Q, Count, Sum, Avg, F
from django.db import transaction
from django.utils import timezone
from django.conf import settings

from rest_framework import viewsets, status, permissions
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.parsers import MultiPartParser, FormParser
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import SearchFilter, OrderingFilter

from .models import (
    Creative, CreativeVersion, CreativeFormat, CreativeTemplate,
    CreativeAsset, CreativeApproval, CreativePerformance,
    CreativeTag, CreativeCompliance, CreativeVariant
)
from .serializers import (
    CreativeSerializer, CreativeDetailSerializer, CreativeCreateSerializer,
    CreativeVersionSerializer, CreativeTemplateSerializer,
    CreativeApprovalSerializer, CreativePerformanceSerializer,
    CreativeUploadSerializer, BulkCreativeSerializer
)
from .filters import (
    CreativeFilter, CreativeTemplateFilter, CreativeApprovalFilter,
    CreativePerformanceFilter
)
from .tasks import (
    process_creative_file, generate_thumbnail, check_compliance,
    transcode_video, optimize_image
)
from apps.core.permissions import IsOwnerOrReadOnly
from apps.core.utils import get_client_ip


# API ViewSets
class CreativeViewSet(viewsets.ModelViewSet):
    """Creative management API viewset.
    
    Provides full CRUD operations for creatives with advanced features:
    - File upload and processing
    - Performance tracking
    - Approval workflow
    - Bulk operations
    - Search and filtering
    """
    
    queryset = Creative.objects.select_related(
        'campaign', 'created_by', 'updated_by'
    ).prefetch_related(
        'versions', 'assets', 'approvals', 'tags', 'variants'
    )
    permission_classes = [permissions.IsAuthenticated, IsOwnerOrReadOnly]
    filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
    filterset_class = CreativeFilter
    search_fields = ['name', 'description', 'campaign__name']
    ordering_fields = ['created_at', 'name', 'priority', 'deadline']
    ordering = ['-created_at']
    parser_classes = [MultiPartParser, FormParser]
    
    def get_serializer_class(self):
        """Return appropriate serializer based on action."""
        if self.action == 'create':
            return CreativeCreateSerializer
        elif self.action == 'retrieve':
            return CreativeDetailSerializer
        elif self.action == 'upload':
            return CreativeUploadSerializer
        elif self.action == 'bulk_create':
            return BulkCreativeSerializer
        return CreativeSerializer
    
    def perform_create(self, serializer):
        """Create creative with user tracking."""
        creative = serializer.save(
            created_by=self.request.user,
            updated_by=self.request.user
        )
        
        # Start processing if file uploaded
        if creative.primary_file:
            process_creative_file.delay(creative.id)
    
    def perform_update(self, serializer):
        """Update creative with user tracking."""
        serializer.save(updated_by=self.request.user)
    
    @action(detail=True, methods=['post'])
    def upload(self, request, pk=None):
        """Upload file for creative.
        
        Args:
            request: HTTP request with file
            pk: Creative ID
            
        Returns:
            Response: Upload status and file info
        """
        creative = self.get_object()
        serializer = self.get_serializer(creative, data=request.data)
        
        if serializer.is_valid():
            serializer.save()
            
            # Start background processing
            process_creative_file.delay(creative.id)
            
            return Response({
                'status': 'success',
                'message': 'File uploaded successfully',
                'creative': CreativeSerializer(creative).data
            })
        
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    
    @action(detail=True, methods=['post'])
    def approve(self, request, pk=None):
        """Approve creative.
        
        Args:
            request: HTTP request with approval data
            pk: Creative ID
            
        Returns:
            Response: Approval status
        """
        creative = self.get_object()
        comments = request.data.get('comments', '')
        
        # Create approval record
        approval = CreativeApproval.objects.create(
            creative=creative,
            reviewer=request.user,
            approval_status='approved',
            comments=comments,
            reviewed_at=timezone.now()
        )
        
        # Update creative status
        creative.creative_status = 'approved'
        creative.save()
        
        return Response({
            'status': 'success',
            'message': 'Creative approved successfully',
            'approval': CreativeApprovalSerializer(approval).data
        })
    
    @action(detail=True, methods=['post'])
    def reject(self, request, pk=None):
        """Reject creative.
        
        Args:
            request: HTTP request with rejection data
            pk: Creative ID
            
        Returns:
            Response: Rejection status
        """
        creative = self.get_object()
        comments = request.data.get('comments', '')
        
        if not comments:
            return Response(
                {'error': 'Comments are required for rejection'},
                status=status.HTTP_400_BAD_REQUEST
            )
        
        # Create approval record
        approval = CreativeApproval.objects.create(
            creative=creative,
            reviewer=request.user,
            approval_status='rejected',
            comments=comments,
            reviewed_at=timezone.now()
        )
        
        # Update creative status
        creative.creative_status = 'rejected'
        creative.save()
        
        return Response({
            'status': 'success',
            'message': 'Creative rejected',
            'approval': CreativeApprovalSerializer(approval).data
        })
    
    @action(detail=True, methods=['get'])
    def performance(self, request, pk=None):
        """Get creative performance data.
        
        Args:
            request: HTTP request
            pk: Creative ID
            
        Returns:
            Response: Performance metrics
        """
        creative = self.get_object()
        
        # Get date range
        days = int(request.query_params.get('days', 30))
        end_date = timezone.now().date()
        start_date = end_date - timedelta(days=days)
        
        # Get performance data
        performance_data = CreativePerformance.objects.filter(
            creative=creative,
            date__range=[start_date, end_date]
        ).order_by('date')
        
        # Calculate totals
        totals = performance_data.aggregate(
            total_impressions=Sum('impressions'),
            total_clicks=Sum('clicks'),
            total_conversions=Sum('conversions'),
            total_spend=Sum('spend'),
            total_revenue=Sum('revenue')
        )
        
        # Calculate rates
        ctr = 0
        conversion_rate = 0
        roas = 0
        
        if totals['total_impressions']:
            ctr = (totals['total_clicks'] / totals['total_impressions']) * 100
        
        if totals['total_clicks']:
            conversion_rate = (totals['total_conversions'] / totals['total_clicks']) * 100
        
        if totals['total_spend']:
            roas = float(totals['total_revenue'] / totals['total_spend'])
        
        return Response({
            'creative': CreativeSerializer(creative).data,
            'performance': CreativePerformanceSerializer(performance_data, many=True).data,
            'totals': totals,
            'metrics': {
                'ctr': round(ctr, 2),
                'conversion_rate': round(conversion_rate, 2),
                'roas': round(roas, 2)
            }
        })
    
    @action(detail=True, methods=['post'])
    def duplicate(self, request, pk=None):
        """Duplicate creative.
        
        Args:
            request: HTTP request
            pk: Creative ID
            
        Returns:
            Response: New creative data
        """
        original = self.get_object()
        
        # Create duplicate
        duplicate = Creative.objects.create(
            name=f"{original.name} (Copy)",
            description=original.description,
            creative_type=original.creative_type,
            campaign=original.campaign,
            priority=original.priority,
            created_by=request.user,
            updated_by=request.user
        )
        
        # Copy assets
        for asset in original.assets.all():
            CreativeAsset.objects.create(
                creative=duplicate,
                asset_type=asset.asset_type,
                name=asset.name,
                file=asset.file,
                metadata=asset.metadata,
                order=asset.order
            )
        
        return Response({
            'status': 'success',
            'message': 'Creative duplicated successfully',
            'creative': CreativeSerializer(duplicate).data
        })
    
    @action(detail=False, methods=['post'])
    def bulk_create(self, request):
        """Bulk create creatives.
        
        Args:
            request: HTTP request with bulk data
            
        Returns:
            Response: Created creatives
        """
        serializer = self.get_serializer(data=request.data)
        
        if serializer.is_valid():
            creatives = serializer.save()
            return Response({
                'status': 'success',
                'message': f'{len(creatives)} creatives created successfully',
                'creatives': CreativeSerializer(creatives, many=True).data
            })
        
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    
    @action(detail=False, methods=['post'])
    def bulk_approve(self, request):
        """Bulk approve creatives.
        
        Args:
            request: HTTP request with creative IDs
            
        Returns:
            Response: Approval status
        """
        creative_ids = request.data.get('creative_ids', [])
        comments = request.data.get('comments', '')
        
        if not creative_ids:
            return Response(
                {'error': 'No creatives specified'},
                status=status.HTTP_400_BAD_REQUEST
            )
        
        creatives = Creative.objects.filter(id__in=creative_ids)
        approved_count = 0
        
        with transaction.atomic():
            for creative in creatives:
                # Create approval record
                CreativeApproval.objects.create(
                    creative=creative,
                    reviewer=request.user,
                    approval_status='approved',
                    comments=comments,
                    reviewed_at=timezone.now()
                )
                
                # Update creative status
                creative.creative_status = 'approved'
                creative.save()
                approved_count += 1
        
        return Response({
            'status': 'success',
            'message': f'{approved_count} creatives approved successfully'
        })


class CreativeVersionViewSet(viewsets.ModelViewSet):
    """Creative version management API viewset."""
    
    queryset = CreativeVersion.objects.select_related('creative', 'created_by')
    serializer_class = CreativeVersionSerializer
    permission_classes = [permissions.IsAuthenticated]
    filter_backends = [DjangoFilterBackend, OrderingFilter]
    ordering = ['-version_number']
    
    def get_queryset(self):
        """Filter versions by creative."""
        creative_id = self.request.query_params.get('creative')
        if creative_id:
            return self.queryset.filter(creative_id=creative_id)
        return self.queryset


class CreativeTemplateViewSet(viewsets.ModelViewSet):
    """Creative template management API viewset."""
    
    queryset = CreativeTemplate.objects.all()
    serializer_class = CreativeTemplateSerializer
    permission_classes = [permissions.IsAuthenticated]
    filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
    filterset_class = CreativeTemplateFilter
    search_fields = ['name', 'description']
    ordering_fields = ['name', 'usage_count', 'created_at']
    ordering = ['-usage_count']
    
    @action(detail=True, methods=['post'])
    def use_template(self, request, pk=None):
        """Create creative from template.
        
        Args:
            request: HTTP request with creative data
            pk: Template ID
            
        Returns:
            Response: Created creative
        """
        template = self.get_object()
        
        # Get creative data
        name = request.data.get('name', f'Creative from {template.name}')
        campaign_id = request.data.get('campaign_id')
        variables = request.data.get('variables', {})
        
        if not campaign_id:
            return Response(
                {'error': 'Campaign ID is required'},
                status=status.HTTP_400_BAD_REQUEST
            )
        
        # Create creative from template
        creative = Creative.objects.create(
            name=name,
            description=f'Created from template: {template.name}',
            creative_type=template.template_type,
            campaign_id=campaign_id,
            created_by=request.user,
            updated_by=request.user
        )
        
        # Update template usage count
        template.usage_count = F('usage_count') + 1
        template.save()
        
        return Response({
            'status': 'success',
            'message': 'Creative created from template',
            'creative': CreativeSerializer(creative).data
        })


class CreativeApprovalViewSet(viewsets.ModelViewSet):
    """Creative approval workflow API viewset."""
    
    queryset = CreativeApproval.objects.select_related(
        'creative', 'reviewer'
    )
    serializer_class = CreativeApprovalSerializer
    permission_classes = [permissions.IsAuthenticated]
    filter_backends = [DjangoFilterBackend, OrderingFilter]
    filterset_class = CreativeApprovalFilter
    ordering = ['-created_at']


class CreativePerformanceViewSet(viewsets.ReadOnlyModelViewSet):
    """Creative performance data API viewset."""
    
    queryset = CreativePerformance.objects.select_related('creative')
    serializer_class = CreativePerformanceSerializer
    permission_classes = [permissions.IsAuthenticated]
    filter_backends = [DjangoFilterBackend, OrderingFilter]
    filterset_class = CreativePerformanceFilter
    ordering = ['-date']


# Web Views
class CreativeListView(LoginRequiredMixin, ListView):
    """Creative list view."""
    
    model = Creative
    template_name = 'creatives/creative_list.html'
    context_object_name = 'creatives'
    paginate_by = 20
    
    def get_queryset(self):
        """Get filtered creative queryset."""
        queryset = Creative.objects.select_related(
            'campaign', 'created_by'
        ).prefetch_related('tags')
        
        # Apply filters
        search = self.request.GET.get('search')
        if search:
            queryset = queryset.filter(
                Q(name__icontains=search) |
                Q(description__icontains=search) |
                Q(campaign__name__icontains=search)
            )
        
        creative_type = self.request.GET.get('type')
        if creative_type:
            queryset = queryset.filter(creative_type=creative_type)
        
        status_filter = self.request.GET.get('status')
        if status_filter:
            queryset = queryset.filter(creative_status=status_filter)
        
        return queryset.order_by('-created_at')
    
    def get_context_data(self, **kwargs):
        """Add extra context data."""
        context = super().get_context_data(**kwargs)
        
        # Get filter options
        context['creative_types'] = Creative.CREATIVE_TYPES
        context['creative_statuses'] = Creative.CREATIVE_STATUS
        
        # Get statistics
        context['stats'] = {
            'total_creatives': Creative.objects.count(),
            'pending_approval': Creative.objects.filter(
                creative_status='pending_review'
            ).count(),
            'approved': Creative.objects.filter(
                creative_status='approved'
            ).count(),
            'processing': Creative.objects.filter(
                creative_status='processing'
            ).count(),
        }
        
        return context


class CreativeDetailView(LoginRequiredMixin, DetailView):
    """Creative detail view."""
    
    model = Creative
    template_name = 'creatives/creative_detail.html'
    context_object_name = 'creative'
    
    def get_queryset(self):
        """Get creative with related data."""
        return Creative.objects.select_related(
            'campaign', 'created_by', 'updated_by'
        ).prefetch_related(
            'versions', 'assets', 'approvals__reviewer',
            'tags', 'variants', 'performance_data'
        )
    
    def get_context_data(self, **kwargs):
        """Add extra context data."""
        context = super().get_context_data(**kwargs)
        creative = self.object
        
        # Get recent performance data
        end_date = timezone.now().date()
        start_date = end_date - timedelta(days=30)
        
        performance_data = creative.performance_data.filter(
            date__range=[start_date, end_date]
        ).order_by('date')
        
        context['performance_data'] = performance_data
        
        # Calculate performance metrics
        if performance_data:
            totals = performance_data.aggregate(
                total_impressions=Sum('impressions'),
                total_clicks=Sum('clicks'),
                total_conversions=Sum('conversions'),
                total_spend=Sum('spend'),
                total_revenue=Sum('revenue')
            )
            
            context['performance_totals'] = totals
            
            # Calculate rates
            if totals['total_impressions']:
                context['ctr'] = (totals['total_clicks'] / totals['total_impressions']) * 100
            
            if totals['total_clicks']:
                context['conversion_rate'] = (totals['total_conversions'] / totals['total_clicks']) * 100
            
            if totals['total_spend']:
                context['roas'] = float(totals['total_revenue'] / totals['total_spend'])
        
        return context


@login_required
def creative_upload(request):
    """Creative upload view.
    
    Args:
        request: HTTP request
        
    Returns:
        HttpResponse: Upload page or redirect
    """
    if request.method == 'POST':
        # Handle file upload
        name = request.POST.get('name')
        description = request.POST.get('description', '')
        creative_type = request.POST.get('creative_type')
        campaign_id = request.POST.get('campaign_id')
        primary_file = request.FILES.get('primary_file')
        
        if not all([name, creative_type, campaign_id, primary_file]):
            messages.error(request, 'All required fields must be filled.')
            return render(request, 'creatives/creative_upload.html')
        
        try:
            # Create creative
            creative = Creative.objects.create(
                name=name,
                description=description,
                creative_type=creative_type,
                campaign_id=campaign_id,
                primary_file=primary_file,
                creative_status='processing',
                created_by=request.user,
                updated_by=request.user
            )
            
            # Start background processing
            process_creative_file.delay(creative.id)
            
            messages.success(request, 'Creative uploaded successfully. Processing started.')
            return redirect('creatives:creative_detail', pk=creative.pk)
            
        except Exception as e:
            messages.error(request, f'Error uploading creative: {str(e)}')
    
    # Get campaigns for dropdown
    from apps.campaigns.models import Campaign
    campaigns = Campaign.objects.filter(status='active')
    
    context = {
        'campaigns': campaigns,
        'creative_types': Creative.CREATIVE_TYPES,
    }
    
    return render(request, 'creatives/creative_upload.html', context)


@login_required
def approval_dashboard(request):
    """Approval dashboard view.
    
    Args:
        request: HTTP request
        
    Returns:
        HttpResponse: Approval dashboard
    """
    # Get pending approvals
    pending_creatives = Creative.objects.filter(
        creative_status='pending_review'
    ).select_related('campaign', 'created_by')
    
    # Get recent approvals
    recent_approvals = CreativeApproval.objects.select_related(
        'creative', 'reviewer'
    ).order_by('-created_at')[:20]
    
    # Get approval statistics
    approval_stats = {
        'pending': Creative.objects.filter(creative_status='pending_review').count(),
        'approved_today': CreativeApproval.objects.filter(
            approval_status='approved',
            created_at__date=timezone.now().date()
        ).count(),
        'rejected_today': CreativeApproval.objects.filter(
            approval_status='rejected',
            created_at__date=timezone.now().date()
        ).count(),
    }
    
    context = {
        'pending_creatives': pending_creatives,
        'recent_approvals': recent_approvals,
        'approval_stats': approval_stats,
    }
    
    return render(request, 'creatives/approval_dashboard.html', context)


# AJAX Views
@require_http_methods(["GET"])
@login_required
def ajax_creative_search(request):
    """AJAX creative search.
    
    Args:
        request: HTTP request with search query
        
    Returns:
        JsonResponse: Search results
    """
    query = request.GET.get('q', '')
    
    if len(query) < 3:
        return JsonResponse({'creatives': []})
    
    creatives = Creative.objects.filter(
        Q(name__icontains=query) |
        Q(description__icontains=query) |
        Q(campaign__name__icontains=query)
    ).select_related('campaign')[:20]
    
    results = []
    for creative in creatives:
        results.append({
            'id': creative.id,
            'name': creative.name,
            'type': creative.get_creative_type_display(),
            'status': creative.get_creative_status_display(),
            'campaign': creative.campaign.name,
            'url': creative.get_absolute_url()
        })
    
    return JsonResponse({'creatives': results})


@require_http_methods(["POST"])
@login_required
def ajax_creative_approve(request, creative_id):
    """AJAX creative approval.
    
    Args:
        request: HTTP request with approval data
        creative_id: Creative ID
        
    Returns:
        JsonResponse: Approval result
    """
    try:
        creative = get_object_or_404(Creative, id=creative_id)
        comments = request.POST.get('comments', '')
        
        # Create approval record
        approval = CreativeApproval.objects.create(
            creative=creative,
            reviewer=request.user,
            approval_status='approved',
            comments=comments,
            reviewed_at=timezone.now()
        )
        
        # Update creative status
        creative.creative_status = 'approved'
        creative.save()
        
        return JsonResponse({
            'status': 'success',
            'message': 'Creative approved successfully'
        })
        
    except Exception as e:
        return JsonResponse({
            'status': 'error',
            'message': str(e)
        }, status=400)


@require_http_methods(["POST"])
@login_required
def ajax_creative_reject(request, creative_id):
    """AJAX creative rejection.
    
    Args:
        request: HTTP request with rejection data
        creative_id: Creative ID
        
    Returns:
        JsonResponse: Rejection result
    """
    try:
        creative = get_object_or_404(Creative, id=creative_id)
        comments = request.POST.get('comments', '')
        
        if not comments:
            return JsonResponse({
                'status': 'error',
                'message': 'Comments are required for rejection'
            }, status=400)
        
        # Create approval record
        approval = CreativeApproval.objects.create(
            creative=creative,
            reviewer=request.user,
            approval_status='rejected',
            comments=comments,
            reviewed_at=timezone.now()
        )
        
        # Update creative status
        creative.creative_status = 'rejected'
        creative.save()
        
        return JsonResponse({
            'status': 'success',
            'message': 'Creative rejected'
        })
        
    except Exception as e:
        return JsonResponse({
            'status': 'error',
            'message': str(e)
        }, status=400)


@require_http_methods(["GET"])
@login_required
def ajax_creative_performance(request, creative_id):
    """AJAX creative performance data.
    
    Args:
        request: HTTP request
        creative_id: Creative ID
        
    Returns:
        JsonResponse: Performance data
    """
    try:
        creative = get_object_or_404(Creative, id=creative_id)
        
        # Get date range
        days = int(request.GET.get('days', 30))
        end_date = timezone.now().date()
        start_date = end_date - timedelta(days=days)
        
        # Get performance data
        performance_data = creative.performance_data.filter(
            date__range=[start_date, end_date]
        ).order_by('date')
        
        # Format data for charts
        chart_data = {
            'labels': [],
            'impressions': [],
            'clicks': [],
            'conversions': [],
            'spend': [],
            'revenue': []
        }
        
        for data in performance_data:
            chart_data['labels'].append(data.date.strftime('%Y-%m-%d'))
            chart_data['impressions'].append(data.impressions)
            chart_data['clicks'].append(data.clicks)
            chart_data['conversions'].append(data.conversions)
            chart_data['spend'].append(float(data.spend))
            chart_data['revenue'].append(float(data.revenue))
        
        # Calculate totals
        totals = performance_data.aggregate(
            total_impressions=Sum('impressions'),
            total_clicks=Sum('clicks'),
            total_conversions=Sum('conversions'),
            total_spend=Sum('spend'),
            total_revenue=Sum('revenue')
        )
        
        return JsonResponse({
            'chart_data': chart_data,
            'totals': {
                'impressions': totals['total_impressions'] or 0,
                'clicks': totals['total_clicks'] or 0,
                'conversions': totals['total_conversions'] or 0,
                'spend': float(totals['total_spend'] or 0),
                'revenue': float(totals['total_revenue'] or 0)
            }
        })
        
    except Exception as e:
        return JsonResponse({
            'status': 'error',
            'message': str(e)
        }, status=400)


@require_http_methods(["GET"])
@login_required
def ajax_processing_status(request, creative_id):
    """AJAX creative processing status.
    
    Args:
        request: HTTP request
        creative_id: Creative ID
        
    Returns:
        JsonResponse: Processing status
    """
    try:
        creative = get_object_or_404(Creative, id=creative_id)
        
        return JsonResponse({
            'status': creative.creative_status,
            'status_display': creative.get_creative_status_display(),
            'file_size': creative.file_size,
            'duration': creative.duration,
            'dimensions': creative.dimensions,
            'is_compliant': creative.is_compliant,
            'compliance_score': creative.compliance_score
        })
        
    except Exception as e:
        return JsonResponse({
            'status': 'error',
            'message': str(e)
        }, status=400)


@require_http_methods(["GET"])
@login_required
def ajax_creative_stats(request):
    """AJAX creative statistics.
    
    Args:
        request: HTTP request
        
    Returns:
        JsonResponse: Creative statistics
    """
    try:
        # Get basic stats
        stats = {
            'total_creatives': Creative.objects.count(),
            'pending_approval': Creative.objects.filter(
                creative_status='pending_review'
            ).count(),
            'approved': Creative.objects.filter(
                creative_status='approved'
            ).count(),
            'processing': Creative.objects.filter(
                creative_status='processing'
            ).count(),
        }
        
        # Get type distribution
        type_stats = Creative.objects.values('creative_type').annotate(
            count=Count('id')
        ).order_by('-count')
        
        # Get performance stats
        performance_stats = Creative.objects.aggregate(
            total_impressions=Sum('impressions'),
            total_clicks=Sum('clicks'),
            total_conversions=Sum('conversions'),
            avg_ctr=Avg('clicks') / Avg('impressions') * 100
        )
        
        return JsonResponse({
            'stats': stats,
            'type_distribution': list(type_stats),
            'performance': performance_stats
        })
        
    except Exception as e:
        return JsonResponse({
            'status': 'error',
            'message': str(e)
        }, status=400)