#nullable enable
using System;
using IGP.Multiplayer.Network;

namespace IGP.Multiplayer
{
    public enum IGPDataPlaneMode
    {
        None = 0,
        DirectKcp = 1,
        DirectTcp = 2,
    }

    public enum IGPReliableTransportPreference
    {
        KcpOnly = 0,
        TcpOnly = 1,
        PreferTcp = 2,
    }

    public enum IGPRealtimeConnectionState
    {
        Idle = 0,
        WaitingForRoom = 1,
        RequestingDescriptor = 2,
        Connecting = 3,
        Ready = 4,
        Failed = 5,
    }

    internal interface IIGPMultiplayerTransportBackend
    {
        bool IsReady { get; }
        event Action<IGPRealtimeConnectionState>? ConnectionChanged;
        event Action<IGPDataReceived>? DataReceived;
        event Action<IGPPeerActivity>? PeerActivity;
    }
}
