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 Member(TimestampedModel):
    workspace = models.ForeignKey(Workspace, on_delete=models.CASCADE, related_name="members")
    display_name = models.CharField(max_length=200)
    email = models.EmailField(blank=True)
    avatar_url = models.URLField(blank=True, max_length=500)

    def __str__(self) -> str:
        return self.display_name


class Identity(TimestampedModel):
    PROVIDER_CHOICES = [
        ("slack", "Slack"),
        ("discord", "Discord"),
        ("github", "GitHub"),
        ("discourse", "Discourse"),
        ("twitter", "Twitter/X"),
        ("linkedin", "LinkedIn"),
        ("mastodon", "Mastodon"),
    ]

    member = models.ForeignKey(Member, on_delete=models.CASCADE, related_name="identities")
    provider = models.CharField(max_length=50, choices=PROVIDER_CHOICES)
    external_id = models.CharField(max_length=255)
    handle = models.CharField(max_length=255)

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

    def __str__(self) -> str:
        return f"{self.provider}:{self.handle}"
