from django.db import models


class UrlManager(models.Manager):

    def generate(self, url):
        try:
            data = self.get(url=url)
        except UrlData.DoesNotExist:
            import os
            from binascii import hexlify
            slug = hexlify(os.urandom(3)).decode()
            data = self.create(url=url, slug=slug)
        return data


class UrlData(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    url = models.URLField(max_length=1024)
    slug = models.CharField(max_length=15, unique=True, db_index=True)
    hit_count = models.PositiveIntegerField(default=0)

    objects = UrlManager()

    def __str__(self):
        return f"Short Url for: {self.url} is {self.slug}"
