from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.decorators import login_required
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse
from django.utils import timezone
import json
from .models import Fanpage, Flow, MessageLog, ChatSession
from .utils import handle_webhook_event

def home(request):
    if request.user.is_authenticated:
        return redirect('dashboard')
    return render(request, 'core/index.html')

@login_required
def dashboard(request):
    fanpages = Fanpage.objects.all()
    flows = Flow.objects.all()
    recent_logs = MessageLog.objects.order_by('-timestamp')[:10]
    
    # Count messages from today
    today = timezone.now().date()
    today_messages_count = MessageLog.objects.filter(timestamp__date=today).count()
    
    context = {
        'fanpage_count': fanpages.count(),
        'flow_count': flows.count(),
        'fanpages': fanpages,
        'recent_logs': recent_logs,
        'today_messages_count': today_messages_count,
    }
    return render(request, 'core/dashboard.html', context)

@login_required
def fanpage_list(request):
    fanpages = Fanpage.objects.all()
    return render(request, 'core/fanpage_list.html', {'fanpages': fanpages})

@login_required
def flow_list(request):
    flows = Flow.objects.all()
    return render(request, 'core/flow_list.html', {'flows': flows})

@csrf_exempt
def webhook(request):
    if request.method == 'GET':
        # Facebook Webhook verification
        mode = request.GET.get('hub.mode')
        token = request.GET.get('hub.verify_token')
        challenge = request.GET.get('hub.challenge')
        
        if mode == 'subscribe' and token:
            # Check if this token matches any Fanpage verify_token
            # or the one specifically mentioned by the user
            if Fanpage.objects.filter(verify_token=token).exists() or token == 'pages_messaging':
                return HttpResponse(challenge)
        
        return HttpResponse('Verification failed', status=403)
    
    elif request.method == 'POST':
        # Handle incoming messages
        try:
            data = json.loads(request.body.decode('utf-8'))
            # Process the webhook payload
            handle_webhook_event(data)
            return HttpResponse('EVENT_RECEIVED')
        except Exception as e:
            # Log the error if necessary
            return HttpResponse('Error processing request', status=400)
    
    return HttpResponse('Method not allowed', status=405)