from django.db import models
from django.conf import settings
from django.contrib import admin
from django.core.cache import cache
from django.urls import reverse

FORMAT_CHOICES = (
        ('rst', 'reStructuredText'),
        ('html', 'HTML'),
    )

class CSSDocument(models.Model):
    title = models.CharField(max_length=150)
    slug = models.SlugField()
    content = models.TextField()

    def __str__(self):
        return self.__unicode__()

    def __unicode__(self):
        return u'%s' %(self.title,)

class Document(models.Model):
    title = models.CharField(max_length=150)
    islive = models.BooleanField(default=False)
    extracss = models.ManyToManyField(CSSDocument, blank=True)
    folder = models.ForeignKey('Folder', on_delete=models.SET_NULL, null=True, blank=True)
    format = models.CharField(max_length=10, choices=FORMAT_CHOICES)
    slug = models.SlugField()
    content = models.TextField()

    class Meta:
        ordering = ["folder"]

    def __str__(self):
        return self.__unicode__()

    def __unicode__(self):
        return u'%s - %s' %(self.get_basic_url(), self.title)

    def save(self):
        super(Document, self).save()
        # now check if we just set our selves to be live
        if self.islive:
            if self.folder:
                otherdocs = Document.objects.filter(slug__exact=self.slug, islive__exact=True, folder__exact=self.folder).exclude(pk=self.id)
            else:
                otherdocs = Document.objects.filter(slug__exact=self.slug, islive__exact=True, folder__isnull=True).exclude(pk=self.id)
            for doc in otherdocs:
                doc.islive = False
                doc.save()

    def get_basic_url(self):
        folderstring = self.get_folder_path()
        if folderstring != u'':
            folderstring = "%s/" %(folderstring,)

        return "%s%s%s/" %(settings.BPCMS_ROOT, folderstring, self.slug)

    def get_folder_path(self):
        if not self.folder:
            return ''
        else:
            return self.folder.get_path()

    def get_absolute_url(self):
        if self.slug == 'index':
            if self.folder.parent:
                return reverse('bpcms-document-view', kwargs={'folders': self.folder.parent.get_path(), 'slug': self.folder.slug})
            else:
                return reverse('bpcms-document-view', kwargs={'slug': self.folder.slug})
        else:
            if self.folder:
                return reverse('bpcms-document-view', kwargs={'folders': self.get_folder_path(), 'slug': self.slug})
            else:
                return reverse('bpcms-document-view', kwargs={'slug': self.slug})

class Folder(models.Model):
    title = models.CharField(max_length=150)
    slug = models.SlugField()
    parent = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True)

    def __str__(self):
        return self.__unicode__()

    def __unicode__(self):
        return u'%s - %s' %(self.get_path(), self.title)

    def get_path(self):
        folders = []
        curfolder = self
        while curfolder != None:
            folders.append(curfolder.slug)
            curfolder = curfolder.parent

        folders.reverse()
        folderstring = "/".join(folders)
        return folderstring

    def save(self, force_insert=False, force_update=False):
        super(Folder, self).save(force_insert, force_update)
        if self.parent == None:
            cache.delete('bpcms_mainmenu')
        else:
            cache.delete('bpcms_submenu_%s' %(self.get_path()))

    def get_absolute_url(self):
        if self.parent:
            return reverse('bpcms-document-view', kwargs={'folders': self.parent.get_path(), 'slug': self.slug})
        else:
            return reverse('bpcms-document-view', kwargs={'slug': self.slug})
