from django.db import models
from django.contrib.auth.models import User
from  django.template.loader import  render_to_string
# Create your models here
class Link(models.Model):
    STATUS_NORMAL = 1
    STATUS_DELETE = 0
    STATUS_ITEMS = (
        (STATUS_NORMAL,"正常"),
        (STATUS_DELETE,"删除"),
    )
    title = models.CharField(max_length=50,verbose_name="标题")
    created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
    href = models.URLField(verbose_name="链接")#默认长度为200
    status = models.PositiveIntegerField(default=STATUS_NORMAL, choices=STATUS_ITEMS,verbose_name="状态")
    weight = models.PositiveIntegerField(default=1, choices=zip(range(1,6),range(1,6)),
                                         verbose_name="权重",
                                         help_text="权重高展示顺序靠前",
                                         )
    owner = models.ForeignKey(User,verbose_name="作者",on_delete=models.CASCADE)
    class Meta:
        verbose_name = verbose_name_plural = "友链"


class SideBar(models.Model):
    STATUS_SHOW = 1
    STATUS_HIDE = 0
    STATUS_ITEMS = (
        (STATUS_SHOW, '展示'),
        (STATUS_HIDE, '隐藏'),
    )
    Display_HTML = 1
    Display_LATEST = 2
    Display_HOT = 3
    Display_COMMENT = 4
    SIDE_TYPE = (
        (Display_HTML, 'HTML'),
        (Display_HOT, "最新文章"),
        (Display_LATEST, "最热文章"),
        (Display_COMMENT,"最近评论"),

    )
    title = models.CharField(max_length=50,verbose_name="标题")
    display_type = models.PositiveIntegerField(choices=SIDE_TYPE, default=1, verbose_name="展示类型")
    content = models.CharField(max_length=500, blank=True, verbose_name="内容",
                               help_text="如果设置的不是HTML类型可为空" )
    status = models.PositiveIntegerField(choices=STATUS_ITEMS,default=STATUS_SHOW, verbose_name="状态")
    owner = models.ForeignKey(User, verbose_name="作者",on_delete=models.CASCADE)
    created_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")

    class Meta:
        verbose_name = verbose_name_plural = "侧边栏"
    @classmethod
    def get_all(cls):

        return cls.objects.filter(status = cls.STATUS_SHOW)


    @property
    def content_html(self):
        from blog.models import Post
        from comment.models import Comment
        result = ''
        if self.display_type == self.Display_HTML:
            result  = self.content
        elif self.display_type == self.Display_HOT:
            context = {
                'posts': Post.hot_post(with_related= False)
            }
            result = render_to_string('config/block/sidebar_post.html',context)
        elif self.display_type == self.Display_LATEST:
            context = {
                'posts' : Post.latest_posts(with_related= False)
            }
            result = render_to_string('config/block/sidebar_post.html',context)
        elif self.display_type == self.Display_COMMENT:
            context = {
                'comments': Comment.objects.filter(status=Comment.STATUS_NORMAL)
            }
            result = render_to_string('config/block/sidebar_comments.html',context)
        return  result
