from django.db import models
from django.contrib.auth.models import AbstractUser, BaseUserManager
from users.models import User

# class CustomUserManager(BaseUserManager):
#     def create_user(self, email, password=None, **extra_fields):
#         if not email:
#             raise ValueError('The Email field must be set')
#         email = self.normalize_email(email)
#         user = self.model(email=email, **extra_fields)
#         user.set_password(password)
#         user.save(using=self._db)
#         return user

#     def create_superuser(self, email, password=None, **extra_fields):
#         extra_fields.setdefault('is_staff', True)
#         extra_fields.setdefault('is_superuser', True)
#         extra_fields.setdefault('is_active', True)

#         if extra_fields.get('is_staff') is not True:
#             raise ValueError('Superuser must have is_staff=True.')
#         if extra_fields.get('is_superuser') is not True:
#             raise ValueError('Superuser must have is_superuser=True.')
#         return self.create_user(email, password, **extra_fields)

# class User(AbstractUser):
#     username = None  # remove default username
#     email = models.EmailField(unique=True)
#     full_name = models.CharField(max_length=150, blank=True)
#     phone = models.CharField(max_length=20, blank=True)

#     groups = models.ManyToManyField(
#         'auth.Group',
#         verbose_name='groups',
#         blank=True,
#         help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.',
#         related_name="accounts_user_set",
#         related_query_name="accounts_user",
#     )
#     user_permissions = models.ManyToManyField(
#         'auth.Permission',
#         verbose_name='user permissions',
#         blank=True,
#         help_text='Specific permissions for this user.',
#         related_name="accounts_user_permissions_set",
#         related_query_name="accounts_user_permissions",
#     )
    
#     USERNAME_FIELD = 'email'
#     REQUIRED_FIELDS = []  

#     objects = CustomUserManager() # Assign the custom manager

#     def __str__(self):
#         return self.email

class UserAddress(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='address')
    company_name = models.CharField(max_length=100, blank=True, null=True)
    street_address = models.CharField(max_length=255)
    appartment_number = models.CharField(max_length=50, blank=True, null=True)
    city = models.CharField(max_length=100)
    state = models.CharField(max_length=100)
    postal_code = models.CharField(max_length=20, blank=True, null=True)
    country = models.CharField(max_length=100)
    phone_number = models.CharField(max_length=15)
    email = models.EmailField()
