using Orleans;

namespace Managing.Application.Abstractions.Grains;

/// <summary>
/// Orleans grain state for BotRegistry.
/// This class represents the persistent state of the bot registry grain.
/// All properties must be serializable for Orleans state management.
/// </summary>
[GenerateSerializer]
public class BotRegistryState
{
    /// <summary>
    /// Dictionary containing all registered bots. The key is the identifier.
    /// </summary>
    [Id(0)]
    public Dictionary<Guid, BotRegistryEntry> Bots { get; set; } = new();

    /// <summary>
    /// When the registry was last updated
    /// </summary>
    [Id(1)]
    public DateTime LastUpdated { get; set; } = DateTime.UtcNow;

    /// <summary>
    /// Total number of bots currently registered
    /// </summary>
    [Id(2)]
    public int TotalBotsCount { get; set; }

    /// <summary>
    /// Number of active bots (status = Up)
    /// </summary>
    [Id(3)]
    public int ActiveBotsCount { get; set; }
} 