# models/user.py
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
from django.db import models

class UserManager(BaseUserManager):
    def create_user(self, email, password=None, name=None, user_type=None, status=None, created_by=None):
        if not email:
            raise ValueError("The Email field is required")
        email = self.normalize_email(email)
        user = self.model(email=email, name=name, user_type=user_type, status=status, created_by=created_by)
        user.set_password(password)
        user.save(using=self._db)
        return user

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(unique=True)
    name = models.CharField(max_length=255, blank=True)
    status = models.IntegerField(default=True)
    user_type = models.IntegerField(blank=True, help_text='1 - admin, 2 - user')
    created_by = models.BigIntegerField(null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_by = models.BigIntegerField(null=True)
    updated_at = models.DateTimeField(auto_now=True)

    role = models.ManyToManyField("api.Role",through="api.UserRole")

    objects = UserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    USER_TYPE = {
        "admin": 1,
        "user": 2
    }

    STATUS_TO_CODE = {
        "active": 1,
        "inactive": 2,
    }

    IMPORT_RULES = {
        
    }

    class Meta:
        #if no put this db_table, when run migrate, the table name will be api_user
        db_table = 'user'

    def __str__(self):
        return self.email