package domain

import "time"

// DeviceType 设备类型
type DeviceType int

const (
	DeviceTypeUnknown DeviceType = iota
	DeviceTypeWeb
	DeviceTypeMobile
	DeviceTypeDesktop
)

// DeviceStatus 设备状态
type DeviceStatus int

const (
	DeviceStatusInactive DeviceStatus = 0
	DeviceStatusActive   DeviceStatus = 1
)

// Device 设备模型
type Device struct {
	ID             int64        `gorm:"primaryKey;autoIncrement" json:"id"`
	UserID         int64        `gorm:"not null;index" json:"user_id"`
	DeviceID       string       `gorm:"type:varchar(100);uniqueIndex;not null" json:"device_id"`
	DeviceName     string       `gorm:"type:varchar(100)" json:"device_name"`
	DeviceType     DeviceType   `gorm:"type:int;default:0" json:"device_type"`
	DeviceOS       string       `gorm:"type:varchar(50)" json:"device_os"`
	DeviceBrowser  string       `gorm:"type:varchar(50)" json:"device_browser"`
	IP             string       `gorm:"type:varchar(50)" json:"ip"`
	Location       string       `gorm:"type:varchar(100)" json:"location"`
	IsTrusted      bool         `gorm:"default:false" json:"is_trusted"`       // 是否信任该设备
	TrustExpiresAt *time.Time   `gorm:"type:datetime" json:"trust_expires_at"` // 信任过期时间
	Status         DeviceStatus `gorm:"type:int;default:1" json:"status"`
	LastActiveTime time.Time    `json:"last_active_time"`
	CreatedAt      time.Time    `gorm:"autoCreateTime" json:"created_at"`
	UpdatedAt      time.Time    `gorm:"autoUpdateTime" json:"updated_at"`
}

// TableName 指定表名
func (Device) TableName() string {
	return "devices"
}
