package model

type UserStatus string

const (
	UserStatusActive    UserStatus = "active"
	UserStatusInactive  UserStatus = "inactive"
	UserStatusSuspended UserStatus = "suspended"
)

type User struct {
	Base
	ExternalID string     `gorm:"size:255;uniqueIndex" json:"external_id"`
	Email      string     `gorm:"size:320;uniqueIndex" json:"email"`
	Name       string     `gorm:"size:255" json:"name"`
	AvatarURL  string     `gorm:"size:512" json:"avatar_url"`
	Status     UserStatus `gorm:"type:enum('active','inactive','suspended');default:'active'" json:"status"`
	Roles      []Role     `gorm:"many2many:user_roles;" json:"roles,omitempty"`
}

type Role struct {
	Base
	Name        string       `gorm:"size:100;uniqueIndex" json:"name"`
	Description string       `gorm:"size:255" json:"description"`
	Permissions []Permission `gorm:"many2many:role_permissions;" json:"permissions,omitempty"`
}

type Permission struct {
	Base
	Name        string `gorm:"size:150;uniqueIndex" json:"name"`
	Description string `gorm:"size:255" json:"description"`
}
