# coding: utf-8

from django.db import models
#from django.db.models import Q
from django.utils.encoding import force_text
from imagekit.models import ImageSpecField
from imagekit.processors import ResizeToFit, Transpose

import os

from seminar.models import Soustredeni

VZDY=0
ORG=1
NIKDY=2
VIDITELNOST = (
	(VZDY, 'Vždy'),
	(ORG, 'Organizátorům'),
	(NIKDY, 'Nikdy'),
)

# tyhle funkce jsou tady jen kvůli starým migracím, které se na ně odkazují
# až se ty migrace někdy squashnou, tak by mělo být možné funkce smazat
def obrazek_filename_maly():
	pass
def obrazek_filename_stredni():
	pass
def obrazek_filename_velky():
	pass

def obrazek_filename(self, filename):
	gal = self.galerie
	cislo_gal = gal.pk

	# najdi kořenovou galerii
	while (gal.galerie_up):
		gal = gal.galerie_up

	# soustředění je v cestě jen pokud galerie pod nějaké patří
	cesta = (
		['Galerie'] +
		(["soustredeni_{}".format(gal.soustredeni.pk)] if gal.soustredeni else []) +
		["galerie_{}".format(cislo_gal), self.nazev]
	)

	return os.path.join(*cesta)

class Obrazek(models.Model):
	obrazek_velky = models.ImageField(upload_to=obrazek_filename,
		help_text = "Lze vložit libovolně velký obrázek. Ideální je, aby alespoň jeden rozměr měl alespoň 500px.")
	obrazek_stredni = ImageSpecField(source='obrazek_velky',
				processors=[Transpose(Transpose.AUTO), ResizeToFit(900, 675, upscale=False)],
				options={'quality': 95})
	obrazek_maly = ImageSpecField(source='obrazek_velky',
				processors=[Transpose(Transpose.AUTO), ResizeToFit(167, 167, upscale=False)],
				options={'quality': 95})
	nazev = models.CharField('Název', max_length=50, blank=True, null=True)
	popis = models.TextField('Popis', blank=True, null=True)
	datum_vlozeni = models.DateTimeField('Datum vložení', auto_now_add=True)
	galerie = models.ForeignKey('Galerie', blank=True, null=True, on_delete=models.SET_NULL)
	poradi = models.IntegerField('Pořadí', blank=True, null=True)

	def __str__(self):
			return self.obrazek_velky.name

	class Meta:
		verbose_name = 'Obrázek'
		verbose_name_plural = 'Obrázky'
		ordering = ['nazev']

	def obrazek_maly_tag(self):
		if not self.obrazek_maly:
			return ''
		return u'<img src="{}">'.format(self.obrazek_maly.url)
	obrazek_maly_tag.short_description = "Náhled"
	obrazek_maly_tag.allow_tags = True

	def save(self, *args, **kwargs):
		# obrázek potřebuje název, protože se z něj generuje cesta pro jeho uložení
		# (a pak se podle něj taky řadí)
		if self.nazev is None:
			self.nazev = os.path.basename(self.obrazek_velky.name)
		super(Obrazek, self).save(*args, **kwargs)


class Galerie(models.Model):
	nazev = models.CharField('Název', max_length=100)
	datum_vytvoreni = models.DateTimeField('Datum vytvoření', auto_now_add = True)
	datum_zmeny = models.DateTimeField('Datum poslední změny', auto_now = True)
	popis = models.TextField('Popis', blank = True, null = True)
	titulni_obrazek = models.ForeignKey(Obrazek, blank = True, null = True, related_name = "+", on_delete = models.SET_NULL)
	zobrazit = models.IntegerField('Zobrazit?', default = ORG, choices = VIDITELNOST)
	galerie_up = models.ForeignKey('Galerie', blank = True, null = True,
		on_delete=models.SET_NULL)
	soustredeni = models.ForeignKey(Soustredeni, blank = True, null = True,
		on_delete=models.PROTECT)
	poradi = models.IntegerField('Pořadí', blank = True, null = False, default = 0)

	def __str__(self):
		return self.nazev
	class Meta:
		verbose_name = 'Galerie'
		verbose_name_plural = 'Galerie'

	#def link_na_preview(self):
		#"""Odkaz na galerii, používá se v admin rozhranní. """
		#return '<a href="/fotogalerie/galerie/%s/">Preview</a>' % self.id
	#link_na_preview.allow_tags = True
	#link_na_preview.short_description = 'Zobrazit galerii'
#
	#def je_publikovano(self):
		#"""Vraci True, pokud je tato galerie publikovana. """ 
		#if self.zobrazit == VZDY:
			#return True
		#if self.zobrazit == PODLE_CLANKU:
			#for clanek in self.clanek_set.all():
				#if clanek.je_publikovano():
					#return True
		#return False
#
	#@staticmethod
	#def publikovane_galerie():
		#"""Vraci galerie, ktere uz maji byt publikovane."""
		#clanky = Blog.models.Clanek.publikovane_clanky()
		#return Galerie.objects.filter(Q(zobrazit=VZDY) | (Q(clanek__in=clanky) & Q(zobrazit=PODLE_CLANKU))).distinct()