# from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from django.http import Http404
from django.shortcuts import render, get_object_or_404
from django.template import loader
from django.urls import reverse
from django.views import generic
from django.utils import timezone

from .models import Question, Choice

class IndexView(generic.ListView):
	template_name = 'polls/index.html'
	context_object_name = 'latest_question_list'

	def get_queryset(self):
		# returns a queryset containing Questions whose pub_date is less than or 
		# equal to - that is, earlier than or equal to - timezone.now.
		return Question.objects.filter(pub_date = timezone.now()).order_by('-pub_date')[:5]
		#return Question.objects.order_by('-pub_date')[:5]

class DetailView(generic.DetailView):
	model = Question
	template_name = 'polls/details.html'
	def get_queryset(self):
		# excludes questions that aren't published yet
		return Question.objects.filter(pub_date_lte = timezone.now())

class ResultsView(generic.DetailView):
	model = Question
	template_name = 'polls/results.html'

def vote(request, question_id):
	question = get_object_or_404(Question, pk = question_id)
	try:
		selected_choice = question.choice_set.get(pk = request.POST['choice'])
	except (KeyError, Choice.DoesNotExist):
		# Redisplay the question voting form
		return render(request, 'polls/details.html',{'question':question,'error_message': "You didn't select a choice."})
	else:
		selected_choice.votes += 1
		selected_choice.save()
		# Always return an HttpResponseRedirect after successfully dealing
		# with POST data. This prevents data from being posted twice if a
		# user hits the Back button.
		return HttpResponseRedirect(reverse('polls:results', args = (question_id,)))
















# def index(request):
# 	latest_question_list = Question.objects.order_by('-pub_date')[:5]
# 	template = loader.get_template('polls/index.html')
# 	context = {
# 		'latest_question_list': latest_question_list,
# 	}
# 	return HttpResponse(template.render(context, request))

# def detail(request, question_id):
# 	try:
# 		question = Question.objects.get(pk = question_id)
# 	except Question.DoesNotExist:
# 		raise Http404("Question does not exist.")

# 	# short cut instead of ^^^ : 
# 	# question = get_object_or_404(Question, pk = question_id)
# 	return render(request, 'polls/details.html', {'question': question})

# def results(request, question_id):
# 	question = get_object_or_404(Question, pk = question_id)
# 	return render(request, 'polls/results.html', {'question': question})

# def vote(request, question_id):
# 	question = get_object_or_404(Question, pk = question_id)
# 	try:
# 		selected_choice = question.choice_set.get(pk = request.POST['choice'])
# 	except (KeyError, Choice.DoesNotExist):
# 		# Redisplay the question voting form
# 		return render(request, 'polls/details.html',{'question':question,'error_message': "You didn't select a choice."})
# 	else:
# 		selected_choice.votes += 1
# 		selected_choice.save()
# 		# Always return an HttpResponseRedirect after successfully dealing
# 		# with POST data. This prevents data from being posted twice if a
# 		# user hits the Back button.
# 		return HttpResponseRedirect(reverse('polls:results', args = (question_id,)))


















