using ZB.MOM.WW.OtOpcUa.Configuration.Enums;
namespace ZB.MOM.WW.OtOpcUa.Configuration.Entities;
///
/// Top-level deployment unit. 1 or 2 members.
/// Per config-db-schema.md ServerCluster table.
///
public sealed class ServerCluster
{
/// Stable logical ID, e.g. "LINE3-OPCUA".
public required string ClusterId { get; set; }
/// Gets or sets the display name for the server cluster.
public required string Name { get; set; }
/// UNS level 1. Canonical org value: "zb".
public required string Enterprise { get; set; }
/// UNS level 2, e.g. "warsaw-west".
public required string Site { get; set; }
/// Gets or sets the number of nodes in the cluster.
public byte NodeCount { get; set; }
/// Gets or sets the redundancy mode for the cluster.
public required RedundancyMode RedundancyMode { get; set; }
/// Gets or sets a value indicating whether the cluster is enabled.
public bool Enabled { get; set; } = true;
/// Gets or sets optional notes about the cluster.
public string? Notes { get; set; }
/// Gets or sets the UTC timestamp when the cluster was created.
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
/// Gets or sets the user who created the cluster.
public required string CreatedBy { get; set; }
/// Gets or sets the UTC timestamp when the cluster was last modified.
public DateTime? ModifiedAt { get; set; }
/// Gets or sets the user who last modified the cluster.
public string? ModifiedBy { get; set; }
// Navigation
/// Gets or sets the collection of cluster nodes.
public ICollection Nodes { get; set; } = [];
/// Gets or sets the collection of root-level Raw-tree folders in the cluster.
public ICollection RawFolders { get; set; } = [];
}