from django.shortcuts import render, get_object_or_404, redirect
from django.contrib import messages
from django.views.decorators.http import require_POST
from django.utils import timezone
from django.http import JsonResponse
from .models import Destination, Trip, BookingInquiry, TravelBlog

def travels_home(request):
    """
    Renders the main travel portal home page (React Mount Point).
    Also passes latest travel blogs for the marquee ticker.
    """
    # Fetch the 5 most recent published travel blogs for the ticker
    latest_travel_blogs = TravelBlog.objects.filter(is_published=True).order_by('-created_at')[:5]
    
    return render(request, 'travels/travels_home.html', {
        'latest_travel_blogs': latest_travel_blogs
    })

def api_get_trips(request):
    """
    React is URL se filter karke trips mangwayega (bina page reload kiye).
    """
    trips = Trip.objects.filter(is_active=True).order_by('-created_at')
    
    # Optional Filters from React
    category = request.GET.get('category')
    destination = request.GET.get('destination')
    
    if category and category != 'all':
        trips = trips.filter(category=category)
    if destination:
        trips = trips.filter(destination__slug=destination)
        
    data = []
    for trip in trips:
        data.append({
            'id': trip.id,
            'title': trip.title,
            'slug': trip.slug,
            'destination': trip.destination.name,
            'category': trip.get_category_display(),
            'original_price': float(trip.price_inr),
            'discount_percentage': trip.discount_percentage,
            'final_price': float(trip.final_price),
            'duration': f"{trip.duration_days} Days / {trip.duration_nights} Nights",
            'image_url': trip.main_image.url if trip.main_image else '',
        })
        
    return JsonResponse({'trips': data})


    
    
@require_POST
def submit_callback_request(request):
    """
    Handles AJAX submissions from the Trip Detail Callback Modal.
    """
    try:
        # Extract data from POST request
        full_name = request.POST.get('full_name')
        phone = request.POST.get('phone')
        trip_slug = request.POST.get('trip_slug')

        # Basic validation
        if not full_name or not phone:
            return JsonResponse({'status': 'error', 'message': 'Naam aur Mobile number dono zaroori hain bhai.'}, status=400)

        # Get the associated trip
        trip = None
        if trip_slug:
             trip = Trip.objects.filter(slug=trip_slug).first()

        # Try to associate with logged-in user
        user = request.user if request.user.is_authenticated else None

        # Save the inquiry to the database
        BookingInquiry.objects.create(
            trip=trip,
            user=user,
            full_name=full_name,
            phone=phone,
            message="Callback requested via Trip Detail Page modal.",
            status='new'
        )

        # (Optional) Here you could trigger an email or push notification to Yash babu
        
        return JsonResponse({'status': 'success', 'message': 'Aapki request receive ho gayi hai. Hum jald hi call karenge!'})

    except Exception as e:
        print(f"Callback Submission Error: {e}")
        return JsonResponse({'status': 'error', 'message': 'Server mein koi dikkat aayi hai. Kripya WhatsApp par sampark karein.'}, status=500)
        
def travel_blog_list(request):
    """Saare Travel Blogs ki List"""
    blogs = TravelBlog.objects.filter(is_published=True).order_by('-created_at')
    return render(request, 'travels/travel_blog_list.html', {'blogs': blogs})

def travel_blog_detail(request, slug):
    """Single Travel Blog Padhne ka page"""
    blog = get_object_or_404(TravelBlog, slug=slug, is_published=True)
    
    # View Count badhayein
    blog.views_count += 1
    blog.save()
    
    # 🎯 Related Tours logic: Agar blog Bali ka hai, toh Bali ki trips dikhao
    related_tours = None
    if blog.destination:
        related_tours = Trip.objects.filter(destination=blog.destination, is_active=True)[:3]
    
    # Recent Blogs for Sidebar
    recent_blogs = TravelBlog.objects.filter(is_published=True).exclude(id=blog.id).order_by('-created_at')[:4]
    
    context = {
        'blog': blog,
        'related_tours': related_tours,
        'recent_blogs': recent_blogs,
    }
    return render(request, 'travels/travel_blog_detail.html', context)
    
def trip_detail(request, slug):
    """
    Trip ka detailed page. Ye SEO ke liye pure Django template mein banega.
    """
    trip = get_object_or_404(Trip, slug=slug, is_active=True)
    
    # 🎯 Review Form Processing
    if request.method == "POST" and "submit_review" in request.POST:
        # Honeypot Check
        if request.POST.get('website_url'):
            return HttpResponse("Bot detected!", status=400)
            
        user_name = request.POST.get('user_name', '').strip()
        rating = request.POST.get('rating')
        review_text = request.POST.get('review_text', '').strip()
        
        if user_name and rating and review_text:
            try:
                TripReview.objects.create(
                    trip=trip,
                    user_name=user_name,
                    rating=int(rating),
                    review_text=review_text,
                    # Agar user login hai (jaise Yash babu), toh turant approve kar do
                    is_approved=True if request.user.is_authenticated else False
                )
                if request.user.is_authenticated:
                    messages.success(request, "Aapka review publish ho gaya hai! ⭐")
                else:
                    messages.success(request, "Dhanyawad! Aapka review admin approval ke baad dikhega. 🙏")
            except ValueError:
                messages.error(request, "Invalid rating value.")
            return redirect('trip_detail', slug=slug)
    
    return render(request, 'travels/trip_detail.html', {'trip': trip})