
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from django.db.models import Count, Q
from django.utils import timezone
from datetime import timedelta, datetime
from .models import VisitorLog, SignupAttempt, ContactSubmission, PageView
from tenants.models import Tenant


@login_required
def analytics_dashboard(request):
    """Analytics dashboard for site administrators"""
    today = timezone.now().date()
    week_ago = today - timedelta(days=7)
    month_ago = today - timedelta(days=30)
    
    # Visitor Statistics
    total_visitors = VisitorLog.objects.count()
    unique_visitors_today = VisitorLog.objects.filter(
        timestamp__date=today
    ).values('ip_address').distinct().count()
    
    unique_visitors_week = VisitorLog.objects.filter(
        timestamp__date__gte=week_ago
    ).values('ip_address').distinct().count()
    
    unique_visitors_month = VisitorLog.objects.filter(
        timestamp__date__gte=month_ago
    ).values('ip_address').distinct().count()
    
    # Bot vs Human traffic
    human_visitors = VisitorLog.objects.filter(is_bot=False).count()
    bot_visitors = VisitorLog.objects.filter(is_bot=True).count()
    
    # Signup Statistics
    total_signups = SignupAttempt.objects.count()
    successful_signups = SignupAttempt.objects.filter(status='success').count()
    failed_signups = SignupAttempt.objects.filter(status='failed').count()
    
    signups_today = SignupAttempt.objects.filter(timestamp__date=today).count()
    signups_week = SignupAttempt.objects.filter(timestamp__date__gte=week_ago).count()
    signups_month = SignupAttempt.objects.filter(timestamp__date__gte=month_ago).count()
    
    # Contact Form Statistics
    total_contacts = ContactSubmission.objects.count()
    unprocessed_contacts = ContactSubmission.objects.filter(is_processed=False).count()
    contacts_today = ContactSubmission.objects.filter(timestamp__date=today).count()
    contacts_week = ContactSubmission.objects.filter(timestamp__date__gte=week_ago).count()
    
    # Page Views
    top_pages = PageView.objects.filter(
        date__gte=week_ago
    ).order_by('-views_count')[:10]
    
    # Recent Activity
    recent_signups = SignupAttempt.objects.order_by('-timestamp')[:10]
    recent_contacts = ContactSubmission.objects.order_by('-timestamp')[:10]
    recent_visitors = VisitorLog.objects.filter(is_bot=False).order_by('-timestamp')[:20]
    
    # Daily visitor chart data (last 30 days)
    visitor_chart_data = []
    for i in range(30):
        date = today - timedelta(days=i)
        daily_visitors = VisitorLog.objects.filter(
            timestamp__date=date,
            is_bot=False
        ).values('ip_address').distinct().count()
        visitor_chart_data.append({
            'date': date.strftime('%Y-%m-%d'),
            'visitors': daily_visitors
        })
    visitor_chart_data.reverse()
    
    # Referrer analysis
    top_referrers = VisitorLog.objects.filter(
        referrer__isnull=False,
        is_bot=False,
        timestamp__date__gte=week_ago
    ).exclude(referrer='').values('referrer').annotate(
        count=Count('referrer')
    ).order_by('-count')[:10]
    
    context = {
        'total_visitors': total_visitors,
        'unique_visitors_today': unique_visitors_today,
        'unique_visitors_week': unique_visitors_week,
        'unique_visitors_month': unique_visitors_month,
        'human_visitors': human_visitors,
        'bot_visitors': bot_visitors,
        'total_signups': total_signups,
        'successful_signups': successful_signups,
        'failed_signups': failed_signups,
        'signups_today': signups_today,
        'signups_week': signups_week,
        'signups_month': signups_month,
        'total_contacts': total_contacts,
        'unprocessed_contacts': unprocessed_contacts,
        'contacts_today': contacts_today,
        'contacts_week': contacts_week,
        'top_pages': top_pages,
        'recent_signups': recent_signups,
        'recent_contacts': recent_contacts,
        'recent_visitors': recent_visitors,
        'visitor_chart_data': visitor_chart_data,
        'top_referrers': top_referrers,
    }
    
    return render(request, 'analytics/dashboard.html', context)


@login_required
def signup_analytics(request):
    """Detailed signup analytics"""
    signups = SignupAttempt.objects.all().order_by('-timestamp')
    
    context = {
        'signups': signups,
    }
    
    return render(request, 'analytics/signup_analytics.html', context)


@login_required
def contact_analytics(request):
    """Detailed contact form analytics"""
    contacts = ContactSubmission.objects.all().order_by('-timestamp')
    
    context = {
        'contacts': contacts,
    }
    
    return render(request, 'analytics/contact_analytics.html', context)


@login_required
def visitor_analytics(request):
    """Detailed visitor analytics"""
    visitors = VisitorLog.objects.filter(is_bot=False).order_by('-timestamp')
    
    context = {
        'visitors': visitors,
    }
    
    return render(request, 'analytics/visitor_analytics.html', context)
