using System;
using System.Collections.Generic;

namespace Jovian.InGameLogging {
    public interface IGameLogStore {
        int Count { get; }
        int Capacity { get; }

        void Add(LogChannel channel, string message);
        void EnableChannel(LogChannel channel);
        void DisableChannel(LogChannel channel);
        bool IsChannelEnabled(LogChannel channel);
        void Clear();
        void Clear(LogChannel channel);

        ReadOnlySpan<LogEntry> GetEntries();
        int GetEntries(LogChannel channel, List<LogEntry> results);

        event Action<LogEntry> OnEntryAdded;
        event Action OnCleared;

        GameLogSaveData GetSaveData();
        void RestoreFromSaveData(GameLogSaveData data);
    }
}
