from django.conf import settings
from django.db import models
from django.utils.translation import gettext_lazy as _

EMBED_TYPES = (
    ("video", "Video"),
    ("photo", "Photo"),
    ("link", "Link"),
    ("rich", "Rich"),
)


class Embed(models.Model):
    """
    When embed code is fetched from a provider (eg, youtube) we cache that code
    in the database so we don't need to ask for it again.

    This model is used for caching the embed html code. It also stores some
    metadata which gets displayed in the editor.

    If an instance of this model is deleted, it will be automatically refetched
    next time the embed code is needed.
    """

    url = models.TextField()
    max_width = models.SmallIntegerField(null=True, blank=True)
    hash = models.CharField(max_length=32, unique=True, db_index=True)
    type = models.CharField(max_length=10, choices=EMBED_TYPES)
    html = models.TextField(blank=True)
    title = models.TextField(blank=True)
    author_name = models.TextField(blank=True)
    provider_name = models.TextField(blank=True)
    thumbnail_url = models.TextField(blank=True)
    width = models.IntegerField(null=True, blank=True)
    height = models.IntegerField(null=True, blank=True)
    last_updated = models.DateTimeField(auto_now=True)
    cache_until = models.DateTimeField(null=True, blank=True, db_index=True)

    class Meta:
        verbose_name = _("embed")
        verbose_name_plural = _("embeds")

    @property
    def ratio(self):
        if self.width and self.height:
            return self.height / self.width

    @property
    def ratio_css(self):
        ratio = self.ratio
        if ratio:
            return str(ratio * 100) + "%"

    @property
    def is_responsive(self):
        if not getattr(settings, "WAGTAILEMBEDS_RESPONSIVE_HTML", False):
            return False
        return self.ratio is not None

    def __str__(self):
        return self.url
