from django.shortcuts import render, get_object_or_404
from django.http import FileResponse
from django.db.models import F
from .models import Category, Publication
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

def publication_list(request):
    categories = Category.objects.all()
    publication_list = Publication.objects.filter(status='active')
    
    # Filter by category
    category_slug = request.GET.get('category')
    if category_slug:
        publication_list = publication_list.filter(category__slug=category_slug)
    
    # Filter by year
    year = request.GET.get('year')
    if year:
        publication_list = publication_list.filter(published_date__year=year)

    # Pagination
    page = request.GET.get('page', 1)
    paginator = Paginator(publication_list, 6) 
    
    try:
        publications = paginator.page(page)
    except PageNotAnInteger:
        publications = paginator.page(1)
    except EmptyPage:
        publications = paginator.page(paginator.num_pages)

    context = {
        'categories': categories,
        'publications': publications,
        'selected_category': category_slug,
        'selected_year': year,
    }
    return render(request, 'publications/publication_list.html', context)

def publication_detail(request, slug):
    publication = get_object_or_404(Publication, slug=slug, status='active')
    return render(request, 'publications/publication_detail.html', {'publication': publication})

def download_publication(request, slug):
    publication = get_object_or_404(Publication, slug=slug, status='active')
    publication.download_count = F('download_count') + 1
    publication.save()
    
    response = FileResponse(publication.document)
    response['Content-Disposition'] = f'attachment; filename="{publication.document.name}"'
    return response