using Nexus.Api.Models;

namespace Nexus.Api.Services;

public enum QueueDeleteOutcome { Deleted, NotFound, GatewayError, TaskNotFound, InvalidTaskId, Ignored }
public enum QueuePriorityOutcome { Updated, Ignored, TaskNotFound, InvalidTaskId }

public sealed record QueueDeleteResult(QueueDeleteOutcome Outcome);
public sealed record QueuePriorityResult(QueuePriorityOutcome Outcome, string? NewPriority = null);

public interface IDashboardService
{
    Task<DashboardStatus> GetStatusAsync();
    Task<List<DashboardAgentInfo>> GetAgentsAsync();
    Task<List<FeedEntry>> GetOperationsAsync(int limit, string? agentFilter);
    Task<ChatResponse> SendChatAsync(string agentId, string message);
    Task<List<MessageEntry>> GetMessagesAsync(string? sessionKey, int limit, int offset);
    Task<List<QueueItem>> GetQueueAsync(CancellationToken ct);
    Task<QueueDeleteResult> DeleteQueueItemAsync(string id, string? source, CancellationToken ct);
    Task<QueuePriorityResult> CycleQueuePriorityAsync(string id, CancellationToken ct);
    Task<AgentModelInfo?> GetAgentModelAsync(string agentId);
    Task<bool> SetAgentModelAsync(string agentId, string model);
    Task<List<AgentActivityEntry>> GetAgentActivityAsync(string agentId, int limit);
    List<ModelOption> GetAvailableModels();
}
