from django.db import models
from usuarios.models import Usuario


class Categoria(models.Model):
    nome = models.CharField(max_length=100)

    def __str__(self):
        return self.nome

class Tag(models.Model):
    nome = models.CharField(max_length=50)

    def __str__(self):
        return self.nome

def caminho_video(instance, filename):
    return f'artigos/{instance.id}/{filename}'

def caminho_audio(instance, filename):
    return f'artigos/{instance.id}/{filename}'

def caminho_thumbnail(instance, filename):
    return f'artigos/thumbnails/{instance.id}/{filename}'

class Artigo(models.Model):
    thumbnail = models.ImageField(upload_to=caminho_thumbnail, blank=True, null=True)
    autor = models.ForeignKey(Usuario, on_delete=models.CASCADE)
    titulo = models.CharField(max_length=255)
    categoria = models.ForeignKey(Categoria, on_delete=models.CASCADE, null=True, blank=True)
    tags = models.ManyToManyField(Tag, blank=True)
    conteudo = models.TextField(blank=True, null=True)
    tempo_leitura = models.PositiveIntegerField(null=True, blank=True)


    video = models.FileField(upload_to=caminho_video, blank=True, null=True)
    audio = models.FileField(upload_to=caminho_audio, blank=True, null=True)

    is_artigo_picante = models.BooleanField(default=False)

    visualizacoes = models.IntegerField(default=0)
    data_criacao = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.titulo


class ArtigoVisualizacao(models.Model):
    usuario = models.ForeignKey(Usuario, on_delete=models.CASCADE)
    artigo = models.ForeignKey(Artigo, on_delete=models.CASCADE)
    ultima_visualizacao = models.DateTimeField(auto_now_add=True)

    class Meta:
        unique_together = ['usuario', 'artigo']


class Comentario(models.Model):
    autor = models.ForeignKey(Usuario, on_delete=models.CASCADE)
    artigo = models.ForeignKey(Artigo, on_delete=models.CASCADE, related_name='comentarios')
    texto = models.TextField()

    resposta = models.ForeignKey('self', null=True, blank=True, on_delete=models.CASCADE, related_name='respostas')

    data_criacao = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.texto[:50] + '...' if len(self.texto) > 50 else self.texto


class LikeArtigo(models.Model):
    usuario = models.ForeignKey(Usuario, on_delete=models.CASCADE)
    artigo = models.ForeignKey(Artigo, on_delete=models.CASCADE)
    data_criacao = models.DateTimeField(auto_now_add=True)

    class Meta:
        unique_together = ['usuario', 'artigo']

    def __str__(self):
        return f'{self.usuario.email} gostou do artigo {self.artigo.titulo[:50] + "..."}' if len(self.artigo.titulo) > 50 else self.artigo.titulo

class LikeComentario(models.Model):
    usuario = models.ForeignKey(Usuario, on_delete=models.CASCADE)
    comentario = models.ForeignKey(Comentario, on_delete=models.CASCADE)
    data_criacao = models.DateTimeField(auto_now_add=True)

    class Meta:
        unique_together = ['usuario', 'comentario']

    def __str__(self):
        return f'{self.usuario.email} gostou do comentário {self.comentario.texto[:50] + "..."}' if len(self.comentario.texto) > 50 else self.comentario.texto


