# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.shortcuts import render

#import urllib
#import urllib2

import urllib.request

import json
from django.contrib import messages


from django.conf import settings
from magazin.models import *
from prostopages.models import *
from price.models import *
from .forms import *

from django.http import Http404, HttpResponse, HttpResponsePermanentRedirect
from django.shortcuts import get_object_or_404
from django.views.generic import DetailView

from django.shortcuts import render_to_response
from django.template.loader import get_template
from django.http import HttpResponseRedirect
from django.shortcuts import redirect


from django.shortcuts import render
from django.shortcuts import render_to_response
from django.http import HttpResponse
from django.core.mail import send_mail




from django.views.generic import *
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
# Create your views here.

from django.db.models import Count

# поиск
# from django.db.models import Q
# from django.views import View

# from django.contrib.postgres.search import SearchQuery, SearchRank, SearchVector


#поиск
from myfifasalon.forms import *
import json
from django.views.generic import *
# //////////////////////////////////////////////




# class PostDetailView(DetailView): # детализированное представление модели
#     model = Stranica
from django.template import loader
DEFAULT_TEMPLATE = 'blog/blog_detail.html'
DEFAULT_TEMPLATE2 = 'akciya/akciya_detail.html'
DEFAULT_TEMPLATE3 = 'prostopages/prostopages.html'
DEFAULT_TEMPLATE4 = 'prostopages/price.html'
DEFAULT_TEMPLATE5 = 'prostopages/pages.html'
DEFAULT_TEMPLATE6 = 'otziv/otziv_detail.html'






class TagJson(View):
# 	""" Search tags with autocomplete (live search) json data"""
	def get(self, request):
		q = request.GET.get('q', '')
		taglist = []
		tags = Pages.objects.filter(name_block__icontains=q)
		for tag in tags:
			# new = {'q' : tag.name_block, }
			new = {
			'q' : tag.name_block, 
			'url' : tag.razdel.price_slug, 
			'url2' : tag.slug,
			'image' : tag.image.name
			
			}
			taglist.append(new)
		return HttpResponse(json.dumps(taglist),content_type="application/json")






def blog_list(request ):
	#поиск
	form = SearchTagForm()
	# страницы
	akciya = Akciya.objects.filter(active=True)
	slider = Slider.objects.filter(active=True)
	fotos = Fotos.objects.filter(active=True)

	#blog = Blog.objects.filter(active=True).annotate(count_post = Count('id'))
	blog = Blog.objects.filter(active=True)
	pages = Pages.objects.filter(active=True)
	prostopages = Prostopages.objects.filter(active=True)
	masters = Masters.objects.filter(active=True)
	otziv = Otziv.objects.filter(active=True)
	otzivall = Otziv.objects.filter(active=True)[:8]
	otzivallmax = Otziv.objects.filter(active=True).annotate(Count("id"))

	paginator = Paginator(blog, 5)
	page = request.GET.get('page')
	try:
		blog = paginator.page(page)
	except PageNotAnInteger:
		blog = paginator.page(1)
	except EmptyPage:
		blog = paginator.page(paginator.num_pages)
	return render(request, 'blog/blog_list.html', {
		
		'akciya':akciya, 
		'slider':slider, 
		'fotos':fotos, 
 
		'blog':blog, 
		'prostopages':prostopages, 
		'pages':pages, 
		'masters':masters, 
		'otziv':otziv,
		'otzivall':otzivall,
		'otzivallmax':otzivallmax, 

		'page': page,

		'searchtag' : form,

		})

def blog_single(request, slug,):
	#поиск
	form = SearchTagForm()
	# страницы
	akciya = Akciya.objects.filter(active=True)
	slider = Slider.objects.filter(active=True)
	fotos = Fotos.objects.filter(active=True)

	blog = get_object_or_404(Blog.objects.filter(active=True),slug=slug,)
	pages = Pages.objects.filter(active=True)
	prostopages = Prostopages.objects.filter(active=True)
	masters = Masters.objects.filter(active=True)
	otziv = Otziv.objects.filter(active=True)
	otzivall = Otziv.objects.filter(active=True)[:8]
	otzivallmax = Otziv.objects.filter(active=True).annotate(Count("id"))

	if blog.template_name:
		template = loader.select_template((blog.template_name, DEFAULT_TEMPLATE))
	else:
		template = loader.get_template(DEFAULT_TEMPLATE)
	response = HttpResponse(template.render({

		'akciya':akciya, 
		'slider':slider, 
		'fotos':fotos, 

		'blog':blog, 
		'prostopages':prostopages, 
		'pages':pages, 
		'masters':masters, 
		'otziv':otziv, 
		'otzivall':otzivall,
		'otzivallmax':otzivallmax,

		'searchtag' : form,
	
		 }, request))
	return response


# акциии

def akciya_list(request ):
	#поиск
	form = SearchTagForm()
	# страницы
	akciya = Akciya.objects.filter(active=True).order_by('nomer_id').annotate(count_post = Count('id'))
	slider = Slider.objects.filter(active=True)
	fotos = Fotos.objects.filter(active=True)

	pages = Pages.objects.filter(active=True)
	prostopages = Prostopages.objects.filter(active=True)
	masters = Masters.objects.filter(active=True)
	otziv = Otziv.objects.filter(active=True)
	otzivall = Otziv.objects.filter(active=True)[:8]
	otzivallmax = Otziv.objects.filter(active=True).annotate(Count("id"))

	paginator = Paginator(akciya, 10)
	page = request.GET.get('page')
	try:
		akciya = paginator.page(page)
	except PageNotAnInteger:
		akciya = paginator.page(1)
	except EmptyPage:
		akciya = paginator.page(paginator.num_pages)
	return render(request, 'akciya/akciya_list.html', {
		
		'akciya':akciya, 
		'slider':slider, 
		'fotos':fotos, 

		'prostopages':prostopages, 
		'pages':pages, 
		'masters':masters, 
		'otziv':otziv, 
		'otzivall':otzivall,
		'otzivallmax':otzivallmax,

		'page': page,

		'searchtag' : form,

		})

def akciya_single(request, slug,):
	#поиск
	form = SearchTagForm()
	# страницы
	akciya = get_object_or_404(Akciya.objects.filter(active=True),slug=slug,)
	slider = Slider.objects.filter(active=True)
	fotos = Fotos.objects.filter(active=True)

	pages = Pages.objects.filter(active=True)
	prostopages = Prostopages.objects.filter(active=True)
	masters = Masters.objects.filter(active=True)
	otziv = Otziv.objects.filter(active=True)
	otzivall = Otziv.objects.filter(active=True)[:8]
	otzivallmax = Otziv.objects.filter(active=True).annotate(Count("id"))

	if akciya.template_name:
		template = loader.select_template((akciya.template_name, DEFAULT_TEMPLATE2))
	else:
		template = loader.get_template(DEFAULT_TEMPLATE2)
	response = HttpResponse(template.render({

		'akciya':akciya, 
		'slider':slider, 
		'fotos':fotos, 

		'prostopages':prostopages, 
		'pages':pages, 
		'masters':masters, 
		'otziv':otziv, 
		'otzivall':otzivall,
		'otzivallmax':otzivallmax,

		'searchtag' : form,
	
		 }, request))
	return response






def prostopages(request, slug,):
	#поиск
	form = SearchTagForm()
	# страницы
	prostopages = get_object_or_404(Prostopages.objects.filter(active=True),slug=slug,)



	slider = Slider.objects.filter(active=True)
	fotos = Fotos.objects.filter(active=True)

	pages = Pages.objects.filter(active=True)
	akciya = Akciya.objects.filter(active=True)
	masters = Masters.objects.filter(active=True)
	otziv = Otziv.objects.filter(active=True)
	otzivall = Otziv.objects.filter(active=True)[:8]
	otzivallmax = Otziv.objects.filter(active=True).annotate(Count("id"))


	##########ajax###########
	ajax_ns = Fotos.objects.filter(active=True, razdel=2)
	paginator = Paginator(ajax_ns, 12)
	page = request.GET.get('page')
	try:
		ajax_ns = paginator.page(page)
	except PageNotAnInteger:
		ajax_ns = paginator.page(2)
	except EmptyPage:
		ajax_ns = paginator.page(paginator.num_pages)
	##########ajax###########
	ajax_ps = Fotos.objects.filter(active=True, razdel=3)
	paginator = Paginator(ajax_ps, 12)
	page = request.GET.get('page')
	try:
		ajax_ps = paginator.page(page)
	except PageNotAnInteger:
		ajax_ps = paginator.page(2)
	except EmptyPage:
		ajax_ps = paginator.page(paginator.num_pages)
	##########ajax###########
	ajax_ks = Fotos.objects.filter(active=True, razdel=1)
	paginator = Paginator(ajax_ks, 12)
	page = request.GET.get('page')
	try:
		ajax_ks = paginator.page(page)
	except PageNotAnInteger:
		ajax_ks = paginator.page(2)
	except EmptyPage:
		ajax_ks = paginator.page(paginator.num_pages)
	##########ajax###########
	ajax_sk = Fotos.objects.filter(active=True, razdel=5)
	paginator = Paginator(ajax_sk, 12)
	page = request.GET.get('page')
	try:
		ajax_sk = paginator.page(page)
	except PageNotAnInteger:
		ajax_sk = paginator.page(2)
	except EmptyPage:
		ajax_sk = paginator.page(paginator.num_pages)
	#####################


	if prostopages.template_name:
		template = loader.select_template((prostopages.template_name, DEFAULT_TEMPLATE3))
	else:
		template = loader.get_template(DEFAULT_TEMPLATE3)
	response = HttpResponse(template.render({

		'akciya':akciya, 
		'slider':slider, 
		'fotos':fotos, 

		'prostopages':prostopages,
		'ajax_ns':ajax_ns,
		'ajax_ps':ajax_ps,
		'ajax_ks':ajax_ks,
		'ajax_sk':ajax_sk,
		'pages':pages, 
		'masters':masters, 
		'otziv':otziv, 
		'otzivall':otzivall,
		'otzivallmax':otzivallmax,

		'searchtag' : form,
	
		 }, request))
	return response



def pages(request, slug, price_slug):

	#поиск
	form = SearchTagForm()
	# страницы

	# prostopages = get_object_or_404(Prostopages.objects.filter(active=True),slug=slug,)
	slider = Slider.objects.filter(active=True)
	fotos = Fotos.objects.filter(active=True)

	pages = get_object_or_404(Pages.objects.filter(active=True),slug=slug, razdel__price_slug=price_slug)

	price_pages = Price_pages.objects.filter(active=True)

	price_kosmetic = Price_kosmetic.objects.filter(active=True)
	price_nogtevoi = Price_nogtevoi.objects.filter(active=True)
	price_parihmaxer = Price_parihmaxer.objects.filter(active=True)
	price_kolarium = Price_kolarium.objects.filter(active=True)
	
	akciya = Akciya.objects.filter(active=True)
	masters = Masters.objects.filter(active=True)
	otziv = Otziv.objects.filter(active=True)
	otzivall = Otziv.objects.filter(active=True)[:8]
	otzivallmax = Otziv.objects.filter(active=True).annotate(Count("id"))

	# newpages

	# /////////////

	if pages.template_name:
		template = loader.select_template((pages.template_name, DEFAULT_TEMPLATE5))
	else:
		template = loader.get_template(DEFAULT_TEMPLATE5)
	response = HttpResponse(template.render({

		'akciya':akciya, 
		'slider':slider, 
		'fotos':fotos, 
		'price_pages':price_pages, 

		'price_kosmetic':price_kosmetic, 
		'price_nogtevoi':price_nogtevoi, 
		'price_parihmaxer':price_parihmaxer, 
		'price_kolarium':price_kolarium, 
		# 'prostopages':prostopages, 
		'pages':pages, 
		'masters':masters, 
		'otziv':otziv,
		'otzivall':otzivall,
		'otzivallmax':otzivallmax, 

		'searchtag' : form,
	
		 }, request))
	return response







def otziv_list(request,):
	#поиск
	form2 = SearchTagForm()
	# страницы
	akciya = Akciya.objects.filter(active=True)
	slider = Slider.objects.filter(active=True)
	fotos = Fotos.objects.filter(active=True)
	
	blog = Blog.objects.filter(active=True)
	pages = Pages.objects.filter(active=True)
	prostopages = Prostopages.objects.filter(active=True)
	masters = Masters.objects.filter(active=True)
	otziv = Otziv.objects.filter(active=True).annotate(count_post = Count('id'))
	
	
	otzivall = Otziv.objects.filter(active=True)[:8]
	otzivallmax = Otziv.objects.filter(active=True).annotate(Count("id"))


	
	
	paginator = Paginator(otziv, 8)
	page = request.GET.get('page')
	try:
		otziv = paginator.page(page)
	except PageNotAnInteger:
		otziv = paginator.page(1)
	except EmptyPage:
		otziv = paginator.page(paginator.num_pages)


	if request.method == 'POST':
		form = OtzivForm(request.POST)
 		
		if form.is_valid():

			form_item = form.save(commit=False)
			form_item.save()
			
			email_subject = 'Отзыв с сайта Myfifasalon.ru'
			cd = form.cleaned_data      
			     # и отправляем сообщение
			send_mail(email_subject, 'Текст', settings.EMAIL_HOST_USER, ['fifabeautysalon@yandex.ru'], fail_silently=False, 
			html_message=get_template('email.html').render(cd))
			return HttpResponseRedirect( '/thanks/',)
		
		else:
			messages.error(request, 'Заполните правильно капчу')

	else:
		form = OtzivForm()
	return render(request, 'otziv/otziv_list.html', {
		'akciya':akciya, 
		'slider':slider, 
		'fotos':fotos, 
 		'form': form,
 		'blog':blog, 
		'prostopages':prostopages, 
		'pages':pages, 
		'masters':masters, 
		'otziv':otziv, 
		'otzivall':otzivall,
		'otzivallmax':otzivallmax,

		'page': page,

		'searchtag' : form2,

		})






def otziv_single(request, id):
	#поиск
	form = SearchTagForm()
	# страницы
	akciya = Akciya.objects.filter(active=True)
	slider = Slider.objects.filter(active=True)
	fotos = Fotos.objects.filter(active=True)

	blog = Blog.objects.filter(active=True)
	pages = Pages.objects.filter(active=True)
	prostopages = Prostopages.objects.filter(active=True)
	masters = Masters.objects.filter(active=True)
	otziv = get_object_or_404(Otziv.objects.filter(active=True),id=id,)
	otzivall = Otziv.objects.filter(active=True)[:8]
	otzivallmax = Otziv.objects.filter(active=True).annotate(Count("id"))
	
	if otziv.template_name:
		template = loader.select_template((otziv.template_name, DEFAULT_TEMPLATE6))
	else:
		template = loader.get_template(DEFAULT_TEMPLATE6)
	response = HttpResponse(template.render({

		'akciya':akciya, 
		'slider':slider, 
		'fotos':fotos, 

		'blog':blog, 
		'prostopages':prostopages, 
		'pages':pages, 
		'masters':masters, 
		'otziv':otziv, 
		'otzivall':otzivall,
		'otzivallmax':otzivallmax,

		'searchtag' : form,
	
		 }, request))
	return response



# class SearchView(View):
# 	template_name = "prostopages/search.html"

# 	def get (self, request, *args, **kwargs):
# 		akciya = Akciya.objects.filter(active=True)
# 		slider = Slider.objects.filter(active=True)
# 		fotos = Fotos.objects.filter(active=True)
	
# 		blog = Blog.objects.filter(active=True)
# 		pages = Pages.objects.filter(active=True)
# 		prostopages = Prostopages.objects.filter(active=True)
# 		masters = Masters.objects.filter(active=True)
# 		otzivall = Otziv.objects.filter(active=True)[:8]
# 		otzivallmax = Otziv.objects.filter(active=True).annotate(Count("id"))
# 		query = self.request.GET.get('q')
# 		founded_products = Pages.objects.filter(
# 			Q(razdel__name_block__icontains=query) |
# 			Q(name_block__icontains=query) |
# 			Q(small_opisanie__icontains=query) |
# 			Q(text_block__icontains=query) |
# 			Q(text_block2__icontains=query) |
# 			Q(text_block3__icontains=query) |
# 			Q(text_block4__icontains=query) |
# 			Q(text_block5__icontains=query)
# 			)
# 		context = {
# 			'founded_products': founded_products,
# 			'akciya':akciya, 
# 			'slider':slider, 
# 			'fotos':fotos, 
	
# 			'blog':blog, 
# 			'prostopages':prostopages, 
# 			'pages':pages, 
# 			'masters':masters, 
# 			'otzivall':otzivall,
# 			'otzivallmax':otzivallmax,
# 		}
# 		return render (self.request, self.template_name, context)

