package user

import "time"

type User struct {
	Email     string     `gorm:"type:VARCHAR(255);primary_key;not null"`
	Available bool       `gorm:"default:false"`
	DeletedAt *time.Time `gorm:"type:TIMESTAMP;deleted_at"`

	LarkType           string `gorm:"type:VARCHAR(255)"`
	LarkUserID         string `gorm:"type:VARCHAR(255);uniqueIndex:idx_lark_user_id"`
	LarkUserOpenID     string `gorm:"type:VARCHAR(255);index:idx_lark_user_open_id"`
	LarkUserName       string `gorm:"type:VARCHAR(255)"`
	LarkUserEnName     string `gorm:"type:VARCHAR(255)"`
	LarkUserNickName   string `gorm:"type:VARCHAR(255)"`
	LarkDepartmentID   string `gorm:"type:VARCHAR(255)"`
	LarkDepartmentName string `gorm:"type:VARCHAR(255)"`

	NameSearchText string `gorm:"type:VARCHAR(255);index:idx_name_search_text"`
	NameSearchAbbr string `gorm:"type:VARCHAR(255);index:idx_name_search_abbr"`

	GithubID      string `gorm:"type:VARCHAR(255);index:idx_github_id"`
	Soc2Compliant bool   `gorm:"default:false"`
}

type UserGroup struct {
	Name        string    `gorm:"type:VARCHAR(255);primary_key;not null"`
	CreatedAt   time.Time `gorm:"created_at;type:TIMESTAMP;not null;<-:create"`
	ParentName  string    `gorm:"type:VARCHAR(255);not null;default:''"`
	Description string    `gorm:"type:VARCHAR(255);not null"`
	Source      string    `gorm:"type:VARCHAR(255);not null"`
}

func (UserGroup) TableName() string {
	return "user_groups"
}

type UserGroupMapping struct {
	CreatedAt time.Time `gorm:"created_at;type:TIMESTAMP;not null;<-:create"`
	UserEmail string    `gorm:"type:VARCHAR(255);primary_key;not null"`
	GroupName string    `gorm:"type:VARCHAR(255);primary_key;not null"`
}

func (UserGroupMapping) TableName() string {
	return "user_group_mappings"
}
