from __future__ import unicode_literals

from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.urls import reverse
from django.db import models
from django.db.models.signals import pre_save
from django.utils import timezone
from django.utils.safestring import mark_safe
from django.utils.text import slugify


from markdown_deux import markdown
# from comments.models import Comment

from .utils import get_read_time
# Create your models here.
# MVC MODEL VIEW CONTROLLER

class ConceptManager(models.Manager):
    def active(self, *args, **kwargs):
        return super(ConceptManager, self).filter(draft=False).filter(publish__lte=timezone.now())


def upload_location(instance, filename):
    ConceptModel = instance.__class__
    new_id = ConceptModel.objects.order_by("id").last().id + 1
    """
    instance.__class__ gets the model Concept. We must use this method because the model is defined below.
    Then create a queryset ordered by the "id"s of each object, 
    Then we get the last object in the queryset with `.last()`
    Which will give us the most recently created Model instance
    We add 1 to it, so we get what should be the same id as the the Concept we are creating.
    """
    return "%s/%s" %(new_id, filename)

class Concept(models.Model):
    name = models.TextField()
    publish = models.BooleanField(default=False)

    objects = ConceptManager()

    def __unicode__(self):
        return self.name

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse("concepts:detail", kwargs={"pk": self.id})

    class Meta:
        ordering = ["-pk", "-name"]

    def get_markdown(self):
        name = self.name
        markdown_text = markdown(name)
        return mark_safe(markdown_text)


def pre_save_concept_receiver(sender, instance, *args, **kwargs):
     if instance.name:
        html_string = instance.get_markdown()
        read_time_var = get_read_time(html_string)
        instance.read_time = read_time_var


pre_save.connect(pre_save_concept_receiver, sender=Concept)










