import uuid
from django.db import models
from django.contrib.auth.models import AbstractUser

class Company(models.Model):
    """
    Company record representing an organization that will use the Review API.
    """

    PLAN_CHOICES = [
        ("free", "Free"),
        ("paid", "Paid"),
    ]
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=255)
    email = models.EmailField(blank=True, null=True)
    logo = models.ImageField(upload_to="company_logos/", blank=True, null=True)
    branding = models.JSONField(default=dict, blank=True)   # colors, wording, sample template
    plan = models.CharField(max_length=20, choices=PLAN_CHOICES, default="free")
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name


class CompanyUser(AbstractUser):
    """
    Custom user model for company staff/admins.
    """
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    company = models.ForeignKey(
        Company,
        on_delete=models.CASCADE,
        related_name="users",
        null=True,
        blank=True,
    )

    # Override M2M fields to avoid reverse accessor name clashes
    groups = models.ManyToManyField(
        "auth.Group",
        related_name="companyuser_groups",
        blank=True,
        help_text="The groups this user belongs to."
    )

    user_permissions = models.ManyToManyField(
        "auth.Permission",
        related_name="companyuser_permissions",
        blank=True,
        help_text="Specific permissions for this user."
    )

    phone_number = models.CharField(max_length=32, blank=True, null=True)

    class Meta:
        verbose_name = "company user"
        verbose_name_plural = "company users"

    def __str__(self):
        return self.get_full_name() or self.username
