package model

import "time"

type NodeState string

const (
	NodeStatePending  NodeState = "pending"
	NodeStateReady    NodeState = "ready"
	NodeStateLeft     NodeState = "left"
	NodeStateDraining NodeState = "draining"
	NodeStateDrained  NodeState = "drained"
)

// NodeKind classifies a node by how it joined the cluster.
type NodeKind string

const (
	// NodeKindLocalhost is the auto-registered local node from `orca init`.
	NodeKindLocalhost NodeKind = "localhost"
	// NodeKindLinux is a generic Linux node (ubuntu/debian/alpine) joined
	// without a specific type. Reserved for future SSH-join flows.
	NodeKindLinux NodeKind = "linux"
	// NodeKindProxmox is a Proxmox VE 8/9 host joined via SSH bootstrap.
	NodeKindProxmox NodeKind = "proxmox"
)

type Node struct {
	ID       string            `json:"id"`
	Name     string            `json:"name"`
	Address  string            `json:"address"`
	State    NodeState         `json:"state"`
	JoinedAt time.Time         `json:"joined_at"`
	LastSeen time.Time         `json:"last_seen"`
	Metadata map[string]string `json:"metadata,omitempty"`
	// Kind classifies the node: localhost | linux | proxmox (REQ-049).
	// Empty string for rows created before migration 0006.
	Kind string `json:"kind,omitempty"`
	// OS is the auto-detected OS identifier from /etc/os-release ID=
	// (ubuntu|debian|alpine|pve|linux). Empty for pre-0006 rows.
	OS string `json:"os,omitempty"`
}
