 
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.http import JsonResponse
from django.views.decorators.http import require_http_methods
from django.contrib import messages
from django.db.models import Count
from apps.campaigns.models import Campaign
from apps.advertisers.models import Advertiser
from apps.channels.models import Channel


def landing_page(request):
    """
    Main landing page for the Adtlas platform.
    
    If user is authenticated, redirect to dashboard.
    Otherwise, show the landing page with login form.
    """
    if request.user.is_authenticated:
        return redirect('dashboard')
    
    context = {
        'title': 'Adtlas - TV Advertising Platform',
        'description': 'Dynamic Ad Insertion Management System for Broadcast Television'
    }
    
    return render(request, 'core/landing.html', context)


@login_required
def dashboard(request):
    """
    Main dashboard view for authenticated users.
    
    Shows overview statistics and recent activity.
    """
    # Get dashboard statistics
    stats = {
        'total_campaigns': Campaign.objects.count(),
        'active_campaigns': Campaign.objects.filter(status='active').count(),
        'total_advertisers': Advertiser.objects.count(),
        'total_channels': Channel.objects.count(),
    }
    
    # Get recent campaigns
    recent_campaigns = Campaign.objects.select_related('advertiser').order_by('-created_at')[:5]
    
    context = {
        'title': 'Dashboard',
        'stats': stats,
        'recent_campaigns': recent_campaigns,
    }
    
    return render(request, 'core/dashboard.html', context)


@login_required
@require_http_methods(["GET"])
def dashboard_stats_api(request):
    """
    API endpoint for dashboard statistics.
    
    Returns JSON data for dashboard widgets and charts.
    """
    stats = {
        'campaigns': {
            'total': Campaign.objects.count(),
            'active': Campaign.objects.filter(status='active').count(),
            'paused': Campaign.objects.filter(status='paused').count(),
            'completed': Campaign.objects.filter(status='completed').count(),
        },
        'advertisers': {
            'total': Advertiser.objects.count(),
            'active': Advertiser.objects.filter(is_active=True).count(),
        },
        'channels': {
            'total': Channel.objects.count(),
            'active': Channel.objects.filter(is_active=True).count(),
        }
    }
    
    return JsonResponse(stats)