import os

from django.db import models
from django.core.files.storage import FileSystemStorage
from django.urls import reverse

from reversion import revisions as reversion
from solo.models import SingletonModel


@reversion.register(ignore_duplicates=True)
class Nastaveni(SingletonModel):

	class Meta:
		db_table = 'seminar_nastaveni'
		verbose_name = 'Nastavení semináře'

#	aktualni_rocnik = models.ForeignKey("tvorba.Rocnik", verbose_name='aktuální ročník',
#		null=False, on_delete=models.PROTECT)

	aktualni_cislo = models.ForeignKey("tvorba.Cislo", verbose_name='Aktuální číslo',
		null=True, blank=False, on_delete=models.PROTECT,
		)

	cena_sous = models.IntegerField(null=False,
									verbose_name="Účastnický poplatek za soustředění",
									default=1000)

	@property
	def aktualni_rocnik(self):
		return self.aktualni_cislo.rocnik

	def __str__(self):
		return 'Nastavení semináře'

	def admin_url(self):
		return reverse('admin:various_nastaveni_change', args=(self.id, ))
	
	def verejne(self):
		return False


class OverwriteStorage(FileSystemStorage):
	""" Varianta FileSystemStorage, která v případě, že soubor cílového
	jména již existuje, ho smaže a místo něj uloží soubor nový"""
	def get_available_name(self,name, max_length=None):
		if self.exists(name):
			os.remove(os.path.join(self.location,name))
		return super().get_available_name(name,max_length)


class SeminarModelBase(models.Model):
	class Meta:
		abstract = True

	def verejne(self):
		return False

	# def get_absolute_url(self):
	# 	return "https://" + str(get_current_site(None)) + self.verejne_url()

	def admin_url(self):
		app_name = self._meta.app_label
		model_name = self._meta.model_name
		return reverse('admin:{}_{}_change'.format(app_name, model_name), args=(self.id, ))