using FishNet.Transporting;
using FishNet.Transporting.Multipass;
using UnityEngine;
namespace FishNet.Managing.Transporting
{
    /// 
    /// Communicates with the Transport to send and receive data.
    /// 
    public sealed partial class TransportManager : MonoBehaviour
    {
        #region Public.
        /// 
        /// Returns IsLocalTransport for the current transport.
        /// 
        public bool IsLocalTransport(int connectionId) => (Transport == null) ? false : Transport.IsLocalTransport(connectionId);
        #endregion
        /// 
        /// Gets transport on index.
        /// Commonly index will be 0 unless using Multipass.
        /// 
        /// 
        public Transport GetTransport(int index)
        {
            //If using multipass try to find the correct transport.
            if (Transport is Multipass mp)
            {
                return mp.GetTransport(index);
            }
            //Not using multipass.
            else
            {
                return Transport;
            }
        }
        /// 
        /// Gets transport of type T.
        /// 
        /// Returns the found transport which is of type T. Returns default of T if not found.
        public T GetTransport() where T : Transport
        {
            //If using multipass try to find the correct transport.
            if (Transport is Multipass mp)
            {
                if (typeof(T) == typeof(Multipass))
                    return (T)(object)mp;
                else
                    return mp.GetTransport();
            }
            //Not using multipass.
            else
            {
                if (Transport.GetType() == typeof(T))
                    return (T)(object)Transport;
                else
                    return default(T);
            }
        }
    }
}