from django.db import models

from accounts.models import Workspace


class TimestampedModel(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True


class Source(TimestampedModel):
    KIND_CHOICES = [
        ("slack_channel", "Slack channel"),
        ("discord_channel", "Discord channel"),
        ("github_repo", "GitHub repo"),
        ("discourse_category", "Discourse category"),
        ("twitter_stream", "Twitter/X stream"),
        ("linkedin_page", "LinkedIn page"),
    ]

    workspace = models.ForeignKey(Workspace, on_delete=models.CASCADE, related_name="sources")
    name = models.CharField(max_length=200)
    kind = models.CharField(max_length=50, choices=KIND_CHOICES)
    external_id = models.CharField(max_length=255)
    metadata = models.JSONField(default=dict, blank=True)

    class Meta:
        unique_together = [("kind", "external_id")]

    def __str__(self) -> str:
        return f"{self.kind}:{self.name}"
