from django.contrib.auth.models import BaseUserManager
from django.core.exceptions import ObjectDoesNotExist
from core.models import Cliente

class UsuarioManager(BaseUserManager):
    """Gerenciador de usuário personalizado para lidar com superusuário"""

    def create_user(self, username, email, password=None, **extra_fields):
        """Cria um usuário normal"""
        if not email:
            raise ValueError("O usuário deve ter um e-mail válido.")
        email = self.normalize_email(email)

        # Definir um cliente padrão para usuários normais (se necessário)
        cliente = extra_fields.get("cliente")
        if not cliente:
            try:
                cliente = Cliente.objects.get(nome="Cliente Padrão")
            except ObjectDoesNotExist:
                cliente = Cliente.objects.create(
                    nome="Cliente Padrão",
                    cpf_cnpj="00000000000000",
                    email="cliente@email.com"
                )

        user = self.model(username=username, email=email, cliente=cliente, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, username, email, password=None, **extra_fields):
        """Cria um superusuário e atribui um cliente automaticamente"""
        extra_fields.setdefault("is_staff", True)
        extra_fields.setdefault("is_superuser", True)

        return self.create_user(username, email, password, **extra_fields)
