using System;
using InABox.Core;

namespace InABox.Avalonia
{
    
    // public class TransportConnectedEventArgs : EventArgs
    // {
    //
    // }
    // public delegate void TransportConnectedEvent(object sender, TransportConnectedEventArgs args);
    //
    // public class TransportDisconnectedEventArgs : EventArgs
    // {
    //     
    // }
    // public delegate void TransportDisconnectedEvent(object sender, TransportDisconnectedEventArgs args);   
    
    public delegate void BackgroundUpdateStatusEvent(object sender, EventArgs args);
    
    public enum ConnectionStatus
    {
        Disconnected,
        Connecting,
        Connected
    }
    
    public interface IModelHost
    {
        ConnectionStatus Status { get; }
        
        bool IsBackgroundUpdateStatusActive { get; }
        
        event BackgroundUpdateStatusEvent BackgroundUpdateStatusChanged;
        void AddUpdateQueue<TEntity>(QueueUpdater<TEntity> queueUpdater) where TEntity : Entity, IPersistent, IRemotable, new();
        void RemoveUpdateQueue<TEntity>(QueueUpdater<TEntity> queueUpdater) where TEntity : Entity, IPersistent, IRemotable, new();
    }
}