from django.db import models
from django.contrib.auth.models import AbstractBaseUser , BaseUserManager
# Create your models here.
class MyAccountManager(BaseUserManager):
    def create_user(self, first_name, last_name, username, email, password=None):
        if not email:
            raise ValueError('Kindly provide an email')
        if not username:
            raise ValueError('User must provide an username')

        user = self.model(
            email       = self.normalize_email(email),
            username    = username,
            first_name  =first_name,
            last_name   = last_name
        )


        user.set_password(password)
        user.save(using = self._db)
        return user
    
    def create_superuser(self, first_name, last_name, username, email, password):
        user = self.create_user(
            email       = self.normalize_email(email),
            username    = username,           
            first_name  = first_name,
            last_name   = last_name,
            password    = password
        )

        user.is_admin       = True
        user.is_staff       = True
        user.is_active      = True
        user.is_superadmin  = True

        user.save(using = self._db)
        return user

class Account(AbstractBaseUser):
    first_name      = models.CharField(max_length=50)
    last_name       = models.CharField(max_length=50)
    username        = models.CharField(max_length=50, unique=True)
    email           = models.EmailField(max_length=100, unique=True)
    phone_number    = models.CharField(max_length=50)


    # required

    is_admin        = models.BooleanField(default=False)
    is_staff        = models.BooleanField(default=False)

    joined_date     = models.DateTimeField(auto_now_add=True)
    last_login      = models.DateTimeField(auto_now_add=True)
    is_editor       = models.BooleanField(default=False)
    is_teacher      = models.BooleanField(default=False)
    is_active       = models.BooleanField(default=False)
    is_superadmin   = models.BooleanField(default=False)
    is_student      = models.BooleanField(default=False)

    # for login with email field
    USERNAME_FIELD  = 'email'
    REQUIRED_FIELDS = ['username', 'first_name', 'last_name']
    
    objects = MyAccountManager()

    def __str__(self):
        return self.email
    
    def has_perm(self, perm, obj=None):
        if self.is_superadmin:
            return True
    
        if self.is_teacher or self.is_editor:
                if perm.startswith('accounts.'): 
                    return False
                return True
    
    def has_module_perms(self, add_label):
        if self.is_superadmin:
            return True
    
        if self.is_teacher or self.is_editor:
            if add_label == 'accounts':
                return False
            return True
        return False