from uuid import uuid4

from django.contrib.auth.models import UserManager, AbstractUser

from utils import fields


class UserProfile(AbstractUser):
    GENDER_CHOICES = (
        (0, "女"),
        (1, "男"),
        (2, "未知"),
    )
    USER_TYPE_CHOICES = (
        (0, "后台用户"),
        (1, "前台用户"),
    )
    objects = UserManager()
    username = fields.CharField(max_length=150, unique=True, db_index=True, verbose_name='用户账号')
    secret = fields.CharField(max_length=255, default=uuid4, verbose_name='加密秘钥')
    email = fields.CharField(max_length=255, verbose_name="邮箱")
    mobile = fields.CharField(max_length=255, verbose_name="电话")
    avatar = fields.TextField(verbose_name="头像")
    name = fields.CharField(max_length=40, verbose_name="姓名")
    gender = fields.IntegerField(default=2, choices=GENDER_CHOICES, verbose_name="性别")
    remark = fields.TextField(verbose_name="备注")
    user_type = fields.IntegerField(default=2, choices=GENDER_CHOICES, verbose_name="用户类型")
    post = fields.ForeignKey(to='Post', verbose_name='关联岗位')
    role = fields.ForeignKey(to='Role', verbose_name='关联角色')
    dept = fields.ForeignKey(to='Dept', verbose_name='归属部门')
    create_datetime = fields.CreateDateTimeField()
    update_datetime = fields.UpdateDateTimeField()

    class Meta:
        verbose_name = '用户管理'
        verbose_name_plural = verbose_name

    def __str__(self):
        if self.name:
            return f"{self.username}({self.name})"
        return f"{self.username}"