package model

import "time"

const (
	NodeStatusOnline  = "online"
	NodeStatusOffline = "offline"
)

// Node represents a managed server node in the cluster.
// The default "local" node is auto-created for single-machine backward compatibility.
type Node struct {
	ID        uint      `gorm:"primaryKey" json:"id"`
	Name      string    `gorm:"size:128;uniqueIndex;not null" json:"name"`
	Hostname  string    `gorm:"size:255" json:"hostname"`
	IPAddress string    `gorm:"column:ip_address;size:64" json:"ipAddress"`
	Token     string    `gorm:"size:128;uniqueIndex;not null" json:"-"`
	Status    string    `gorm:"size:20;not null;default:'offline'" json:"status"`
	IsLocal   bool      `gorm:"not null;default:false" json:"isLocal"`
	OS        string    `gorm:"size:64" json:"os"`
	Arch      string    `gorm:"size:32" json:"arch"`
	AgentVer             string     `gorm:"column:agent_version;size:32" json:"agentVersion"`
	LastSeen             time.Time  `gorm:"column:last_seen" json:"lastSeen"`
	PrevToken            string     `gorm:"size:128;index" json:"-"`
	PrevTokenExpires     *time.Time `gorm:"column:prev_token_expires" json:"-"`
	CreatedAt            time.Time  `json:"createdAt"`
	UpdatedAt            time.Time  `json:"updatedAt"`
}

func (Node) TableName() string {
	return "nodes"
}
