using Orleans;
using static Managing.Common.Enums;

namespace Managing.Application.Abstractions.Grains;

/// <summary>
/// A small serializable class to store bot metadata.
/// This is a very lean object, perfect for fast storage and retrieval.
/// </summary>
[GenerateSerializer]
public class BotRegistryEntry
{
    /// <summary>
    /// The unique identifier of the bot
    /// </summary>
    [Id(0)]
    public Guid Identifier { get; set; }

    /// <summary>
    /// The unique identifier of the user who owns the bot
    /// </summary>
    [Id(1)]
    public int UserId { get; set; }

    /// <summary>
    /// The current operational status of the bot
    /// </summary>
    [Id(2)]
    public BotStatus Status { get; set; }

    /// <summary>
    /// When the bot was registered in the registry
    /// </summary>
    [Id(3)]
    public DateTime RegisteredAt { get; set; } = DateTime.UtcNow;

    /// <summary>
    /// When the bot status was last updated
    /// </summary>
    [Id(4)]
    public DateTime LastStatusUpdate { get; set; } = DateTime.UtcNow;

    public BotRegistryEntry()
    {
    }

    public BotRegistryEntry(Guid identifier, int userId, BotStatus status = BotStatus.Saved)
    {
        Identifier = identifier;
        UserId = userId;
        Status = status;
        RegisteredAt = DateTime.UtcNow;
        LastStatusUpdate = DateTime.UtcNow;
    }
} 