import uuid
from django.db import models
from django.conf import settings


class CompanyMember(models.Model):
    class RoleType(models.TextChoices):
        MANAGEMENT = "MANAGEMENT", "Management Team"
        DIRECTOR_CLUB = "DIRECTOR_CLUB", "48 Director Club"

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    created_at = models.DateTimeField(auto_now_add=True, db_index=True)
    updated_at = models.DateTimeField(auto_now=True)
    is_active = models.BooleanField(default=True, db_index=True)

    role_type = models.CharField(
        max_length=20,
        choices=RoleType.choices,
        db_index=True,
    )
    # Optional link to a system user. When set, full_name and referral_code
    # can be auto-populated from the user record on save.
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name="company_roles",
    )
    full_name = models.CharField(max_length=255)
    designation = models.CharField(max_length=255)
    referral_code = models.CharField(max_length=20, blank=True, default="")
    photo = models.ImageField(upload_to="company_members/", null=True, blank=True)
    bio = models.TextField(blank=True, default="")
    sort_order = models.PositiveIntegerField(default=0, db_index=True)

    class Meta:
        ordering = ["sort_order", "created_at"]
        verbose_name = "Company Member"
        verbose_name_plural = "Company Members"

    def __str__(self):
        return f"{self.full_name} — {self.designation} ({self.get_role_type_display()})"

    def save(self, *args, **kwargs):
        # Auto-populate from linked user if fields are blank
        if self.user:
            if not self.full_name.strip():
                first = getattr(self.user, "first_name", "") or ""
                last = getattr(self.user, "last_name", "") or ""
                self.full_name = f"{first} {last}".strip() or str(self.user)
            if not self.referral_code.strip():
                self.referral_code = getattr(self.user, "referral_code", "") or ""
        super().save(*args, **kwargs)
