using IoT3D.Framework;
using IoT3D.Framework.DataModel;
using IoT3D.Framework.Unity;
using IoTCenter3D.UnityRpc;
using IoTCenterHost.UnityRpc.SharedInterface;
using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;

public class UnityClientService : IUnityClientService
{
    UnityRpcService rpcHelper;
    public UnityClientService(IRequestContext context,UnityRpcService rpcHelper)
    {
        this.rpcHelper = rpcHelper;
    }
    public Task AddRealTimeSnapshot(string message)
    {
        //throw new System.NotImplementedException();
        Loom.QueueOnMainThread(() =>
        {
           // Debug.Log("Add : " + message);
            RealTimeEventItem realTimeEventItem = JsonConvert.DeserializeObject<RealTimeEventItem>(message);
            EquipDataManager.AddRealTimeSnapshot(realTimeEventItem);
        });

        return Task.CompletedTask;
    }

    public Task LoginCallBack(string message)
    {
        //throw new System.NotImplementedException();
        Loom.QueueOnMainThread(() =>
        {
            rpcHelper.OnLoginCallBack(message);
        });
        return Task.CompletedTask;
    }

    public Task RemoveRealTimeSnapshot(string message)
    {
        Loom.QueueOnMainThread(() =>
        {
            RealTimeEventItem realTimeEventItem = JsonConvert.DeserializeObject<RealTimeEventItem>(message);
            EquipDataManager.RemoveRealTimeSnapshot(realTimeEventItem);
        });
        return Task.CompletedTask;
    }

    public Task SendMessage(string message)
    {
        Loom.QueueOnMainThread(() =>
        {
            rpcHelper.OnClientReceive(message);
        });

        return Task.CompletedTask;
    }

    public Task SetAuthentication(bool isConnected)
    {
        return Task.CompletedTask;
    }

    public Task SetUnityVisibility(bool visibility)
    {
        return Task.CompletedTask;
    }

    public Task UpdateEquipState(string message)
    {
        Loom.QueueOnMainThread(() =>
        {
            EquipStateData Item = JsonConvert.DeserializeObject<EquipStateData>(message);
            EquipDataManager.UpdateEquipState(Item);
        });
        return Task.CompletedTask;
    }

    public Task UpdateRealTimeEvent(string message)
    {
        return Task.CompletedTask;
    }

    public Task UpdateYCItem(string message)
    {
        Loom.QueueOnMainThread(() =>
        {
            YcItemData ycItemData = Newtonsoft.Json.JsonConvert.DeserializeObject<YcItemData>(message);
            RPCModule.UpdateYCItem(ycItemData);
        });
        return Task.CompletedTask;
    }

    public Task UpdateYXItem(string message)
    {
        Loom.QueueOnMainThread(() =>
        {
            YxItemData yxItemData = JsonConvert.DeserializeObject<YxItemData>(message);
            RPCModule.UpdateYXItem(yxItemData);
        });
        return Task.CompletedTask;
    }

   
}
