from django.views.generic import ListView, DetailView
from django.http import Http404
from photo.models import Album, Photo

class AlbumListView(ListView):
    model = Album
    queryset = Album.objects.order_by('-name')
    paginate_by = 20

class PhotoListView(ListView):
    model = Photo
    paginate_by = 20

    def order_by(self):
        return self.ordering

    def get_queryset(self):
        try:
            album = Album.objects.get(slug__exact=self.kwargs['slug'])
            return Photo.objects.filter(album=album).order_by('order', 'image')
        except:
            raise Http404

class PhotoView(DetailView):

    def get_queryset(self, **kwargs):
        return Photo.objects.get(id=self.kwargs['id']).get_queryset()

    def get_object(self, **kwargs):
        try:
            photo = Photo.objects.get(id=self.kwargs['id'])
            return photo
        except:
            raise Http404

    def get_context_data(self, **kwargs):
        context = super(PhotoView, self).get_context_data(**kwargs)
        album = Album.objects.get(slug__exact=self.kwargs['slug'])
        photos = Photo.objects.filter(album=album).order_by('order', 'image')

        found_prev = False
        prev_photo = None
        found_next = False
        next_photo = None

        for photo in photos:
            if not found_prev:
                if not photo.id == int(self.kwargs['id']):
                    prev_photo = photo
                else:
                    found_prev = True
            if found_next:
                next_photo = photo
                break
            if photo.id == int(self.kwargs['id']):
                found_next = True

        context['next_photo'] = next_photo
        context['prev_photo'] = prev_photo

        return context
