package dao

import (
	"github.com/google/uuid"
	"gorm.io/gorm"
	"time"
)

// SysUser 用户
type SysUser struct {
	ID          int            `gorm:"primary_key;type:int" json:"id"` //编号
	CreatedAt   time.Time      // 创建时间
	UpdatedAt   time.Time      // 更新时间
	DeletedAt   gorm.DeletedAt `gorm:"index" json:"-"`                                                                       // 删除时间
	UUID        uuid.UUID      `json:"uuid" gorm:"index;comment:用户UUID"`                                                     // 用户UUID
	Username    string         `json:"userName" gorm:"index;comment:用户登录名"`                                                  // 用户登录名
	Password    string         `json:"password"  gorm:"type:varchar(191);comment:用户登录密码"`                                    // 用户登录密码
	NickName    string         `json:"nickName" gorm:"default:App端用户;comment:用户昵称"`                                          // 用户昵称
	SideMode    string         `json:"sideMode" gorm:"default:dark;comment:用户侧边主题"`                                          // 用户侧边主题
	HeaderImg   string         `json:"headerImg" gorm:"default:https://qmplusimg.henrongyi.top/gva_header.jpg;comment:用户头像"` // 用户头像
	BaseColor   string         `json:"baseColor" gorm:"default:#fff;comment:基础颜色"`                                           // 基础颜色
	ActiveColor string         `json:"activeColor" gorm:"default:#1890ff;comment:活跃颜色"`                                      // 活跃颜色
	AuthorityId uint           `json:"authorityId" gorm:"default:888;comment:用户角色ID"`                                        // 用户角色ID
	Phone       string         `json:"phone"  gorm:"type:varchar(191);comment:用户手机号"`                                        // 用户手机号
	Email       string         `json:"email"  gorm:"type:varchar(191);comment:用户邮箱"`                                         // 用户邮箱
	Enable      int            `json:"enable" gorm:"default:1;comment:用户是否被冻结 1正常 2冻结"`                                      //用户是否被冻结 1正常 2冻结
	AuthId      string         `json:"authId" gorm:"type:varchar(191);comment:权限id" `                                        //权限id
	DeptId      int            `json:"deptId" gorm:"comment:部门id"`
	Dept        Dept           `json:"dept" gorm:"foreignKey:DeptId;references:ID;comment:用户部门"`
	Authority   SysAuthority   `json:"authority" gorm:"foreignKey:AuthorityId;references:AuthorityId;comment:用户角色"`
}

func (*SysUser) TableName() string {
	return "sys_users"
}

func (c *SysUser) LoginFindUserName(username string) (*SysUser, error) {
	var user SysUser
	err := Db.Model(&user).Where("username = ?", username).First(&user).Error
	return &user, err
}

func (c *SysUser) GetSysUsers() ([]SysUser, error) {
	var users []SysUser
	err := Db.Model(&c).Find(&users).Error
	return users, err
}

func (c *SysUser) GetNowSysUser(id int) (*SysUser, error) {
	err := Db.Model(&c).Where("id = ?", id).First(&c).Error
	return c, err
}

func (c *SysUser) GetDeptsSysUsers(depts []int) ([]SysUser, error) {
	var users []SysUser
	err := Db.Model(&c).Where("dept_id in ?", depts).Find(&users).Error
	return users, err
}

func (c *SysUser) GetSysUserInfo(id int) (*SysUser, error) {
	var user SysUser
	err := Db.Model(&user).Preload("Dept").Preload("Authority").Where("id = ?", id).First(&user).Error
	return &user, err
}
