from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone


class Video(models.Model):
    CATEGORY_CHOICES = [
        ('education', 'Education'),
        ('entertainment', 'Entertainment'),
        ('gaming', 'Gaming'),
        ('music', 'Music'),
        ('news', 'News'),
        ('sports', 'Sports'),
        ('technology', 'Technology'),
        ('travel', 'Travel'),
        ('other', 'Other'),
    ]

    title = models.CharField(max_length=200)
    description = models.TextField()
    video_file = models.FileField(upload_to='videos/')
    thumbnail = models.ImageField(upload_to='thumbnails/', blank=True, null=True)
    uploader = models.ForeignKey(User, on_delete=models.CASCADE)
    upload_date = models.DateTimeField(default=timezone.now)
    views = models.PositiveIntegerField(default=0)
    likes = models.PositiveIntegerField(default=0)
    category = models.CharField(max_length=20, choices=CATEGORY_CHOICES, default='other')
    tags = models.CharField(max_length=500, blank=True, help_text="Comma-separated tags")

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return f'/video/{self.id}/'

    @property
    def tag_list(self):
        return [tag.strip() for tag in self.tags.split(',') if tag.strip()]


class Comment(models.Model):
    video = models.ForeignKey(Video, on_delete=models.CASCADE, related_name='comments')
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f'{self.user.username} - {self.video.title}'


class Like(models.Model):
    video = models.ForeignKey(Video, on_delete=models.CASCADE, related_name='video_likes')
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    created_date = models.DateTimeField(default=timezone.now)

    class Meta:
        unique_together = ('video', 'user')

    def __str__(self):
        return f'{self.user.username} likes {self.video.title}'
