#if !UNITY_5_3_OR_NEWER
using System;
using System.Threading;
using NUnit.Framework;

using Passer.Control.Core;

namespace ControlCore.test {
    public class Tests {
        [SetUp]
        public void Setup() {
        }

        [Test]
        public void Test_Participant() {
            Participant participant = new("127.0.0.1", 7681);

            ulong milliseconds = (ulong)DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
            ulong startTime = milliseconds;
            while (milliseconds < startTime + 7000) {
                participant.Update(milliseconds);

                Thread.Sleep(100);
                milliseconds = (ulong)DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
            }

            Assert.Pass();
        }

        [Test]
        public void Test_SiteServer() {
            SiteServer siteServer = new(7681);

            ulong milliseconds = (ulong)DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
            ulong startTime = milliseconds;
            while (milliseconds < startTime + 7000) {
                siteServer.Update(milliseconds);

                Thread.Sleep(100);
                milliseconds = (ulong)DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
            }

            Assert.Pass();
        }

        [Test]
        public void Test_SiteParticipant() {
            SiteServer siteServer = new(7681);
            Participant participant = new("127.0.0.1", 7681);

            ulong milliseconds = (ulong)DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
            ulong startTime = milliseconds;
            while (milliseconds < startTime + 1000) {
                siteServer.Update(milliseconds);
                participant.Update(milliseconds);

                Thread.Sleep(100);
                milliseconds = (ulong)DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
            }

            Assert.That(participant.networkId, Is.EqualTo(1));
        }

        [Test]
        public void Test_ThingMsg() {
            SiteServer siteServer = new();
            Participant participant = new("127.0.0.1");
            Thing thing = new() {
                name = "First Thing",
                modelUrl = "https://passer.life/extras/ant.jpg"
            };

            ulong milliseconds = (ulong)DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
            ulong startTime = milliseconds;
            while (milliseconds < startTime + 7000) {
                siteServer.Update(milliseconds);
                participant.Update(milliseconds);

                Thread.Sleep(100);
                milliseconds = (ulong)DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
            }

            Assert.That(participant.networkId, Is.EqualTo(1));
        }
    }
}
#endif