from pirates import models as pirates_models


class User(pirates_models.AbstractUser):
    def set_unusable_password(self) -> None:
        # Purely for compatibility with Guardian
        pass

    def get_username(self) -> str:
        first_name = self.first_name

        if len(first_name) != 0:
            first_name += " "

        return f"{first_name}{self.last_name}"

    @property
    def can_approve_contracts(self) -> bool:
        # TODO: Do we need the superuser check?
        return self.is_superuser or self.has_perm("contracts.approve")

    @property
    def can_create_contracts(self) -> bool:
        # TODO: Do we need the superuser check?
        return self.is_superuser or self.has_perm("contracts.add")

    @property
    def can_view_confidential(self) -> bool:
        return self.is_superuser or self.has_perm("contracts.view_confidential")

    @property
    def contracts_to_approve_count(self) -> int:
        if not self.can_approve_contracts:
            return 0

        from contracts.models import Contract

        return Contract.objects.filter(
            is_approved=False
        ).count()

    class Meta:
        app_label = "users"
        verbose_name = "Uživatel"
        verbose_name_plural = "Uživatelé"