import json
from django.shortcuts import render, get_object_or_404
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from .models import Program, StudentCounselingLead, StudyDestination, StudyBlog
from django.core.paginator import Paginator

def study_home(request):
    """
    Main entry point for Study Module (React Front-end).
    Passes latest study blogs for the marquee ticker.
    """
    # Fetch the 5 most recent published study blogs for the ticker
    latest_study_blogs = StudyBlog.objects.filter(is_published=True).order_by('-created_at')[:5]
    
    return render(request, 'study/study_home.html', {
        'latest_study_blogs': latest_study_blogs
    })

def api_get_programs(request):
    """Returns a list of active programs for React to filter"""
    programs = Program.objects.filter(is_active=True).select_related('destination')
    
    data = []
    destinations = set() 
    
    for p in programs:
        country_name = p.destination.name
        destinations.add(country_name)
        
        # Safe image fetching
        img_url = p.destination.banner_image.url if p.destination.banner_image else ''
        
        data.append({
            'id': p.id,
            'name': p.name,
            'slug': p.slug,
            'level': p.level,
            'level_display': p.get_level_display(),
            'country': country_name,
            'country_slug': p.destination.slug,
            'duration': p.duration,
            'tuition_fee': p.tuition_fee,
            'image': img_url,
        })
        
    return JsonResponse({
        'programs': data,
        'destinations': list(destinations)
    })

def destination_detail(request, slug):
    """SEO friendly destination page showing guide and related programs"""
    destination = get_object_or_404(StudyDestination, slug=slug, is_active=True)
    programs = destination.programs.filter(is_active=True)
    return render(request, 'study/destination_detail.html', {'destination': destination, 'programs': programs})

def program_detail(request, slug):
    """SEO friendly program detail page with tabular info and apply modal"""
    program = get_object_or_404(Program, slug=slug, is_active=True)
    return render(request, 'study/program_detail.html', {'program': program})

@csrf_exempt
def submit_counseling_lead(request):
    """Saves the student lead generated from the Modal"""
    if request.method == 'POST':
        try:
            data = json.loads(request.body)
            
            # Simple Honeypot Check
            if data.get('website_url'):
                return JsonResponse({'status': 'error', 'message': 'Bot detected!'}, status=400)
                
            lead = StudentCounselingLead.objects.create(
                student_name=data.get('name'),
                email=data.get('email'),
                phone=data.get('phone'),
                highest_education=data.get('education'),
                passing_year=data.get('passing_year', ''),
                academic_score=data.get('score', ''),
                english_test_score=data.get('english_score', ''),
                preferred_course=data.get('course', ''),
            )
            
            country_name = data.get('country')
            if country_name:
                country_obj = StudyDestination.objects.filter(name=country_name).first()
                if country_obj:
                    lead.preferred_country = country_obj
                    lead.save()

            return JsonResponse({'status': 'success', 'message': 'Free Counseling booked! Our representative will contact you soon.'})
            
        except Exception as e:
            return JsonResponse({'status': 'error', 'message': str(e)}, status=400)
            
    return JsonResponse({'status': 'error', 'message': 'Invalid request method.'}, status=405)
    
def study_blog_list(request):
    """List all study abroad guides with filtering"""
    blogs = StudyBlog.objects.filter(is_published=True)
    
    category = request.GET.get('category')
    if category:
        blogs = blogs.filter(category=category)
        
    paginator = Paginator(blogs, 9) # 9 blogs per page
    page_number = request.GET.get('page')
    page_obj = paginator.get_page(page_number)
    
    return render(request, 'study/study_blog_list.html', {
        'page_obj': page_obj,
        'current_category': category
    })

def study_blog_detail(request, slug):
    """Detailed view for a single study blog with sidebar widgets"""
    blog = get_object_or_404(StudyBlog, slug=slug, is_published=True)
    
    # Increment views
    blog.views_count += 1
    blog.save()
    
    # Sidebar Widgets Data
    recent_blogs = StudyBlog.objects.filter(is_published=True).exclude(id=blog.id)[:5]
    top_destinations = StudyDestination.objects.filter(is_active=True)[:4]
    
    return render(request, 'study/study_blog_detail.html', {
        'blog': blog,
        'recent_blogs': recent_blogs,
        'top_destinations': top_destinations
    })