from django.shortcuts import render, get_object_or_404
from django.utils.timezone import localdate
from .models import News, NewsImage, GalleryImage, Testimonial, Vacancy,StaffMember
from .serializers import (
    NewsSerializer, 
    NewsImageSerializer, 
    GalleryImageSerializer, 
    TestimonialSerializer
)

def base(request):
    recent_news = News.objects.filter(is_published=True).order_by('-published_date')[:5]
    
    context = {
        'recent_news': recent_news
    }
    return render(request, 'base.html', context)

def index(request):
    recent_testimonials = Testimonial.objects.filter(is_featured=True).order_by('-date')[:5]
    testimonial_serializer = TestimonialSerializer(recent_testimonials, many=True)
    recent_news = News.objects.filter(is_published=True).order_by('-published_date')[:5]
    
    context = {
        'recent_news': recent_news,
        'recent_testimonials': testimonial_serializer.data
    }
    return render(request, 'index.html', context)

def about_page(request):
    recent_news = News.objects.filter(is_published=True).order_by('-published_date')[:5]
    current_vacancies = Vacancy.objects.filter(
        is_active=True, 
        application_deadline__gte=localdate()
    )
    staff_members = StaffMember.objects.all().order_by('name')
    
    context = {
        'recent_news': recent_news,
        'vacancies': current_vacancies,
        'staff_members': staff_members
    }
    return render(request, 'about.html', context)

def program_page(request):
    recent_gallery_images = GalleryImage.objects.order_by('-uploaded_at')[:4]
    recent_news = News.objects.filter(is_published=True).order_by('-published_date')[:5]
    current_vacancies = Vacancy.objects.filter(
        is_active=True, 
        application_deadline__gte=localdate()
    )
    
    context = {
        'recent_news': recent_news,
        'gallery_images': recent_gallery_images,
        'vacancies': current_vacancies
    }
    return render(request, 'program.html', context)

def news_page(request):
    recent_news = News.objects.filter(is_published=True).order_by('-published_date')[:5]
    news_serializer = NewsSerializer(recent_news, many=True)
    
    # Get additional images for news
    news_with_images = []
    for news_item in recent_news:
        news_data = NewsSerializer(news_item).data
        images = NewsImage.objects.filter(news=news_item)
        news_data['images'] = NewsImageSerializer(images, many=True).data
        news_with_images.append(news_data)
    
    context = {
        'recent_news': recent_news
    }
    return render(request, 'news.html', context)

def news_detail(request, slug):
    try:
        news_item = get_object_or_404(News, slug=slug, is_published=True)
        news_images = NewsImage.objects.filter(news=news_item)
        recent_news = News.objects.filter(
            is_published=True
        ).exclude(id=news_item.id).order_by('-published_date')[:5]
        
        context = {
            'news_item': news_item,
            'news_images': news_images,
            'recent_news': recent_news
        }
        return render(request, 'news_details.html', context)
    except News.DoesNotExist:
        return render(request, '404.html', status=404)

def gallery_page(request):
    recent_gallery_images = GalleryImage.objects.order_by('-uploaded_at')
    gallery_serializer = GalleryImageSerializer(recent_gallery_images, many=True)
    recent_news = News.objects.filter(is_published=True).order_by('-published_date')[:5]
    news_serializer = NewsSerializer(recent_news, many=True)
    
    context = {
        'recent_news': recent_news,
        'gallery_images': recent_gallery_images
    }
    return render(request, 'gallery.html', context)

def contact_page(request):
    recent_news = News.objects.filter(is_published=True).order_by('-published_date')[:5]
    
    context = {
        'recent_news': recent_news
    }
    return render(request, 'contact.html', context)

def policy_page(request):
    recent_news = News.objects.filter(is_published=True).order_by('-published_date')[:5]
    
    context = {
        'recent_news': recent_news
    }
    return render(request, 'policy.html', context)