from django.conf import settings
from django.http import Http404
from django.shortcuts import render
from django.views.generic import DetailView
from django.utils.translation import get_language
from djangocms_blog.models import Post
from djangocms_blog.views import PostListView
from djangocms_blog.settings import get_setting


def blog(request):
    posts = Post.objects.all()
    context = {
        'post_list': posts
    }

    # PostListView.base_template_name='post_list.html'
    return render(request, 'ungleich/djangocms_blog/post_list_ungleich.html', context=context)


class PostListViewUngleich(PostListView):
    model = Post
    context_object_name = 'post_list'
    base_template_name = 'post_list_ungleich.html'
    paginate_by = 5

    def get_context_data(self, **kwargs):
        context = super(PostListView, self).get_context_data(**kwargs)
        context['TRUNCWORDS_COUNT'] = get_setting('POSTS_LIST_TRUNCWORDS_COUNT')
        context['languages'] = settings.LANGUAGES
        context['current_language'] = get_language()

        return context

    def get_paginate_by(self, queryset):
        return get_setting('PAGINATION')

    def get_queryset(self):
        language = get_language()
        queryset = self.model.objects.filter(publish=True).translated(language)
        setattr(self.request, get_setting('CURRENT_NAMESPACE'), self.config)
        return queryset


class PostDetailViewUngleich(DetailView):
    model = Post
    template_name = 'ungleich/djangocms_blog/post_detail.html'
    context_object_name = 'post'
    slug_field = 'slug'
    slug_url_kwarg = 'slug'

    def get_object(self, queryset=None):

        # Use a custom queryset if provided; this is required for subclasses
        # like DateDetailView

        language = get_language()
        if queryset is None:
            queryset = self.get_queryset()
        # Next, try looking up by primary key.
        pk = self.kwargs.get(self.pk_url_kwarg)
        slug = self.kwargs.get(self.slug_url_kwarg)
        if pk is not None:
            queryset = queryset.filter(pk=pk)
        # Next, try looking up by slug.
        if slug is not None and (pk is None or self.query_pk_and_slug):
            slug_field = self.get_slug_field()
            queryset = queryset.translated(language, **{slug_field: slug})
        # If none of those are defined, it's an error.
        if pk is None and slug is None:
            raise AttributeError("Generic detail view %s must be called with "
                                 "either an object pk or a slug."
                                 % self.__class__.__name__)
        try:
            # Get the single item from the filtered queryset
            obj = queryset.first()
        except queryset.model.DoesNotExist:
            raise Http404(_("No %(verbose_name)s found matching the query") %
                          {'verbose_name': queryset.model._meta.verbose_name})
        return obj