from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils.translation import gettext_lazy as _

from subjects.models import Subject


class User(AbstractUser):
    REQUIRED_FIELDS = ['email', 'first_name', 'last_name']

    first_name = models.CharField(_('first name'), max_length=150)
    last_name = models.CharField(_('last name'), max_length=150)
    email = models.EmailField(_('email address'))

    supplier = models.ForeignKey(
        Subject, models.PROTECT, _('supplier'), blank=True, null=True,
    )
    customers = models.ManyToManyField(
        Subject, blank=True, verbose_name=_('customers'),
    )

    class Meta(AbstractUser.Meta):
        ...

    def _get_m2m_ids(self, field: str):
        return list(getattr(self, field).values_list('id', flat=True))

    def get_customers(self) -> list[int]:
        return self._get_m2m_ids('customers')