﻿using DarkRift.Client.Unity;
using Dissonance.Networking;

namespace Dissonance.Integrations.DarkRift2
{
    public class DarkRift2CommsNetwork
        : BaseCommsNetwork<DarkRift2Server, DarkRift2Client, DarkRift2Peer, Unit, Unit>
    {
        internal UnityClient DarkRiftClient { get; private set; }

        protected override DarkRift2Server CreateServer(Unit connectionParameters)
        {
            return new DarkRift2Server(this);
        }

        protected override DarkRift2Client CreateClient(Unit connectionParameters)
        {
            return new DarkRift2Client(this);
        }

        private void Start()
        {
            if (!DarkRiftClient)
                DarkRiftClient = FindObjectOfType<UnityClient>();

            if (!DarkRiftClient)
                Log.Error("Cannot find Dark Rift UnityClient instance");
        }

        protected override void Update()
        {
            base.Update();

            if (IsInitialized)
            {
                //If we don't have a dark rift client try to find one
                if (DarkRiftClient == null)
                {
                    DarkRiftClient = FindObjectOfType<UnityClient>();
                    if (!DarkRiftClient)
                        return;
                }

                //Transition to the right mode
                if (DarkRiftClient.Connected)
                {
                    if (Mode != NetworkMode.Client)
                        RunAsClient(Unit.None);
                }
                else if (Mode != NetworkMode.None)
                    Stop();
            }
        }
    }
}
