from django.db import models
from django.conf import settings


class PulseChannel(models.Model):
    name        = models.CharField(max_length=100)
    emoji       = models.CharField(max_length=10, default="📡")
    description = models.CharField(max_length=200, blank=True)
    created_by  = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, related_name="channels_created")
    is_default  = models.BooleanField(default=False)
    followers   = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name="pulse_channels")
    created_at  = models.DateTimeField(auto_now_add=True)
    class Meta:
        ordering = ["-is_default", "-created_at"]

class Pulse(models.Model):
    NEIGHBORHOODS = [
        ("makongeni","Makongeni"),("township","Township"),("landless","Landless"),
        ("kiandutu","Kiandutu"),("gatuanyaga","Gatuanyaga"),("thika_greens","Thika Greens"),
        ("section_9","Section 9"),("ngoigwa","Ngoigwa"),("kamenu","Kamenu"),("other","Other"),
    ]
    channel      = models.ForeignKey(PulseChannel, on_delete=models.CASCADE, related_name="pulses")
    user         = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="pulses")
    emoji        = models.CharField(max_length=10)
    label        = models.CharField(max_length=100, blank=True)
    neighborhood = models.CharField(max_length=30, choices=NEIGHBORHOODS, default="other")
    note         = models.CharField(max_length=280, blank=True)
    upvotes      = models.PositiveIntegerField(default=0)
    downvotes    = models.PositiveIntegerField(default=0)
    expires_at   = models.DateTimeField()
    created_at   = models.DateTimeField(auto_now_add=True)
    class Meta:
        ordering = ["-created_at"]

class PulseVote(models.Model):
    pulse = models.ForeignKey(Pulse, on_delete=models.CASCADE, related_name="votes")
    user  = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    vote  = models.CharField(max_length=4, choices=[("up","Up"),("down","Down")])
    class Meta:
        unique_together = ("pulse", "user")

class HiddenGem(models.Model):
    CATEGORIES = [
        ("food","🍽️ Food"),("study","📚 Study Spot"),("mechanic","🔧 Mechanic"),
        ("shopping","🛒 Shopping"),("nature","🌿 Nature"),("entertainment","🎉 Entertainment"),("other","💎 Other"),
    ]
    name           = models.CharField(max_length=100)
    category       = models.CharField(max_length=20, choices=CATEGORIES, default="other")
    neighborhood   = models.CharField(max_length=30, default="other")
    tip            = models.CharField(max_length=280, blank=True)
    nominated_by   = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, related_name="gems_nominated")
    votes          = models.PositiveIntegerField(default=0)
    verified_count = models.PositiveIntegerField(default=0)
    is_verified    = models.BooleanField(default=False)
    created_at     = models.DateTimeField(auto_now_add=True)
    class Meta:
        ordering = ["-votes", "-created_at"]

class GemVote(models.Model):
    gem    = models.ForeignKey(HiddenGem, on_delete=models.CASCADE, related_name="gem_votes")
    user   = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    verify = models.BooleanField(default=False)
    class Meta:
        unique_together = ("gem", "user")
