from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
from django.views.generic.dates import YearArchiveView, MonthArchiveView
from django.views.generic.detail import DetailView

from utils.views import PaginatedListView

from notes.models import LuxNote, Note


class NoteList(PaginatedListView):
    """
    Return a list of Notes in reverse chronological order
    """
    queryset = LuxNote.objects.all().order_by('-pub_date')
    template_name = "archives/notes.html"


class NoteDetailView(DetailView):
    model = LuxNote
    template_name = "details/note.html"
    slug_field = "slug"


class NoteDetailViewTXT(NoteDetailView):
    template_name = "details/entry.txt"


class NoteDetailViewAMP(NoteDetailView):
    template_name = "details/entry.amp"


class NoteYearArchiveView(YearArchiveView):
    queryset = LuxNote.objects.all()
    date_field = "pub_date"
    make_object_list = True
    allow_future = True
    template_name = "archives/notes_date.html"


class NoteMonthArchiveView(MonthArchiveView):
    queryset = LuxNote.objects.all()
    date_field = "pub_date"
    allow_future = True
    template_name = "archives/notes_date.html"


"""
Legacy Notes views
"""


def entry_detail(request, year, month, slug):
    context = {
        'object': get_object_or_404(Note, slug__exact=slug),
    }
    return render_to_response(
        'details/note.html',
        context,
        context_instance=RequestContext(request)
    )


def date_list(request, year, month=None):
    if month:
        qs = Note.objects.filter(date_created__year=year, date_created__month=month).order_by('-date_created')
    else:
        qs = Note.objects.filter(date_created__year=year).order_by('-date_created')
    context = {
        'year': year,
        'month': month,
        'object_list': qs,
    }
    return render_to_response(
        "archives/notes_date.html",
        context,
        context_instance=RequestContext(request)
    )


def entry_list(request):
    context = {
        'object_list': Note.objects.all().order_by('-date_created').select_related(),
    }
    return render_to_response("archives/notes.html", context, context_instance=RequestContext(request))