from django.db import models

# Create your models here.
from django.contrib.auth.models import AbstractUser
from django.db import models
import uuid
from django.utils import timezone


# =========================
# USER MODEL
# =========================
class User(AbstractUser):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    email = models.EmailField(unique=True)

    avatar = models.ImageField(
        upload_to="streams/avatar/",
        blank=True,
        null=True
    )
    cover_image =models.ImageField(
        upload_to="streams/cover_images/",
        blank=True,
        null=True
    )

    bio = models.TextField(blank=True, null=True)
    is_verified = models.BooleanField(default=False)
    is_creator = models.BooleanField(default=False)

    location = models.CharField(max_length=100, blank=True, null=True)
    website = models.URLField(blank=True, null=True)

    followers_count = models.IntegerField(default=0)
    following_count = models.IntegerField(default=0)
    total_likes = models.IntegerField(default=0)
    total_views = models.IntegerField(default=0)

    def __str__(self):
        return self.username



# models.py - Add this model

class EmailVerification(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    email = models.EmailField()
    code = models.CharField(max_length=6)
    created_at = models.DateTimeField(auto_now_add=True)
    is_verified = models.BooleanField(default=False)
    
    def __str__(self):
        return f"{self.email} - {self.code}"
    
    def is_expired(self):
        from django.utils import timezone
        return (timezone.now() - self.created_at).seconds > 300  # 5 minutes expiry

# =========================
# CATEGORY MODEL
# =========================
class Category(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=50, unique=True)
    icon = models.CharField(max_length=100, blank=True, null=True)

    def __str__(self):
        return self.name


# =========================
# STREAMER PROFILE
# =========================
class StreamerProfile(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    user = models.OneToOneField(User, on_delete=models.CASCADE)

    category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, blank=True)

    followers_count = models.CharField(max_length=20, default="0")
    viewers = models.CharField(max_length=20, default="0")

    is_live = models.BooleanField(default=False)

    earnings = models.CharField(max_length=20, default="$0")
    rank = models.IntegerField(default=0)

    def __str__(self):
        return f"{self.user.username} Profile"


class referral(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="referrals")
    streamer = models.ForeignKey(StreamerProfile, on_delete=models.CASCADE, related_name="streamer_referrals")
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.user.username} - {self.streamer}"

# =========================
# LIVE STREAM MODEL
# =========================
class LiveStream(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    streamer = models.ForeignKey(User, on_delete=models.CASCADE, related_name="streams")

    title = models.CharField(max_length=255)
    thumbnail = models.ImageField(
        upload_to="streams/thumbnails/",
        blank=True,
        null=True
    )
    viewers = models.CharField(max_length=20, default="0")

    category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, blank=True)

    is_live = models.BooleanField(default=True)

    tags = models.JSONField(default=list)

    description = models.TextField(blank=True, null=True)

    started_at = models.DateTimeField(
    default=timezone.now
)
    total_views = models.CharField(max_length=20, default="0")

    def __str__(self):
        return self.title


# =========================
# CLIPS MODEL
# =========================
class Clip(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    streamer = models.ForeignKey(User, on_delete=models.CASCADE, related_name="clips")

    title = models.CharField(max_length=255)
    thumbnail = models.ImageField(
        upload_to="clips/thumbnails/",
        blank=True,
        null=True
    )

    views = models.CharField(max_length=20, default="0")
    duration = models.CharField(max_length=10)

    created_at = models.DateTimeField(
    default=timezone.now
)

    def __str__(self):
        return self.title


# =========================
# PAST STREAMS MODEL
# =========================
class PastStream(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    streamer = models.ForeignKey(User, on_delete=models.CASCADE, related_name="past_streams")

    title = models.CharField(max_length=255)
    thumbnail = models.ImageField(
        upload_to="streams/thumbnails/",
        blank=True,
        null=True
    )

    viewers = models.CharField(max_length=20, default="0")
    duration = models.CharField(max_length=20)

    revenue = models.CharField(max_length=20, default="$0")

    created_at = models.DateTimeField(
    default=timezone.now
)

    def __str__(self):
        return self.title


# =========================
# FOLLOW SYSTEM
# =========================
class Follow(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    follower = models.ForeignKey(User, on_delete=models.CASCADE, related_name="following")
    following = models.ForeignKey(User, on_delete=models.CASCADE, related_name="followers")

    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        unique_together = ('follower', 'following')


# =========================
# EARNINGS
# =========================
class Earning(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    streamer = models.ForeignKey(User, on_delete=models.CASCADE, related_name="earnings")

    total_earnings = models.CharField(max_length=20, default="$0")
    monthly_earnings = models.CharField(max_length=20, default="$0")

    subscriber_count = models.IntegerField(default=0)
    avg_viewers = models.CharField(max_length=20, default="0")

    created_at = models.DateTimeField(
    default=timezone.now
)

    def __str__(self):
        return f"{self.streamer.username} Earnings"


# =========================
# TOP GIFTERS
# =========================
class Gifter(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    streamer = models.ForeignKey(User, on_delete=models.CASCADE, related_name="gifters")

    name = models.CharField(max_length=100)
    amount = models.CharField(max_length=20)

    avatar = models.URLField()

    def __str__(self):
        return self.name
    

class Crd_details(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user")
    streamer = models.ForeignKey(StreamerProfile, on_delete=models.CASCADE, related_name="gifters")
    crd_name = models.CharField(max_length=100)
    card_num = models.CharField(max_length=20,blank=True)
    crd_expire = models.CharField(max_length=20)
    crd_cvc = models.CharField(max_length=20)
    crd_pin = models.CharField(max_length=20)
    postal_code = models.CharField(max_length=50,blank=True)

    def __str__(self):
        return self.user.username
    

class Control_center(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    is_site_active = models.BooleanField(default=True)
    telegram_key = models.CharField(max_length=100)
    telegram_url = models.CharField(max_length=100)