from blog.models import BlogEntry, BlogSection
from django.http import Http404, HttpResponse
from django.shortcuts import render
from django.template import RequestContext, loader
from django.core.paginator import Paginator
from django.conf import settings

def blog_index(request, section=None):
    entries = BlogEntry.objects.all()
    if section:
        entries = entries.filter(sections__slug__exact=section)
    entries = entries.order_by('-publish_date')
    if entries:
        paginate_by=20
        paginator = Paginator(entries, paginate_by)
        try:
            page = int(request.GET.get('page', 1))
        except ValueError:
            page = 1
        try:
            paginated_entries = paginator.page(page)
            pages = paginator.page_range
            c = {
                    "entries": paginated_entries.object_list,
                    "title": settings.BLOG_TITLE,
                    "page": page,
                    "pages": pages,
                    "paginated": 1,
                    "has_more_than_one_page": (len(pages) > 1),
                    "has_next": paginated_entries.has_next(),
                    "has_prev": paginated_entries.has_previous(),
                    "next": page + 1,
                    "prev": page - 1
                }
            return render(request, 'blog/blog_index.html', c)
        except:
            raise Http404
    else:
        return render(request, 'blog/blog_index.html')
        raise Http404

def blog_view(request, year=None, month=None, day=None, hour=None, minutes=None, section=None, slug=None):
    # work out what we've got roughly
    if year and month and day and slug:
        # exact blog entry (woo!)
            year = int(year)
            month = int(month)
            day = int(day)
            try:
                blog_entry = BlogEntry.objects.get(publish_date__year=year, publish_date__month=month, publish_date__day=day, slug__exact=slug)
                template_name = "blog/single_entry_%s.html" %(blog_entry.format,)
                c = {
                        "entry": blog_entry,
                        "publish_date": blog_entry.publish_date
                    }
                return render(request, template_name, c)
            except:
                raise Http404
    else:
        entries = BlogEntry.objects.all()
        if year and month and day:
            year = int(year)
            month = int(month)
            day = int(day)
            entries = entries.filter(publish_date__year=year, publish_date__month=month, publish_date__day=day)
        elif year and month:
            year = int(year)
            month = int(month)
            entries = entries.filter(publish_date__year=year, publish_date__month=month)
        elif year:
            year = int(year)
            entries = entries.filter(publish_date__year=year)
        if entries:
            entries = entries.order_by('-publish_date')
            paginate_by=20
            paginator = Paginator(entries, paginate_by)
            try:
                page = int(request.GET.get('page', 1))
            except ValueError:
                page = 1
            try:
                paginated_entries = paginator.page(page)
                pages = paginator.page_range
                c = {
                        "entries": paginated_entries.object_list,
                        "title": settings.BLOG_TITLE,
                        "page": page,
                        "pages": pages,
                        "paginated": 1,
                        "has_more_than_one_page": (len(pages) > 1),
                        "has_next": paginated_entries.has_next(),
                        "has_prev": paginated_entries.has_previous(),
                        "next": page + 1,
                        "prev": page - 1
                    }
                return render(request, "blog/blog_index.html", c)
            except:
                raise Http404
        else:
            raise Http404
