using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using NeonTea.Quakeball.Networking.Packets;
using NeonTea.Quakeball.TeaNet.Peers;
using NeonTea.Quakeball.TeaNet.Packets;

namespace NeonTea.Quakeball.Networking.Instances {
    public abstract class NetInstance {

        protected static byte[] Fingerprint = new byte[] { 0xFF, 0xF7 };

        public Peer Peer;
        public List<ulong> Connections = new List<ulong>();

        public NetInstance() {
            Peer = new Peer(Fingerprint);
        }

        public abstract void Start(string address, int port, PeerMessageListener listener);
        public abstract void OnStop();
        public abstract void Connected(Connection conn);
        public abstract void Disconnected(Connection conn);
        public abstract void Handle(Connection conn, Packet packet);

        public abstract void UpdateLocalPlayer();
        public abstract void SendPlayerSync();
        public abstract void LocalPlayerAction(PlayerAction action);

        public virtual void Update() { }

        public void Stop() {
            if (Peer.Running) {
                OnStop();
                Peer.Stop();
                Peer.MessageListener.Message("Stopping");
            }
        }

    }
}