﻿using AsmodeeDigital.PlayReal.Plugin.Manager;
using com.daysofwonder.async;
using UnityEngine;
using UnityEngine.Events;

namespace AsmodeeDigital.PlayReal.Plugin.Utils
{
    public class AutoConnect : MonoBehaviour
    {
        public string Login;
        public string Password;

        public UnityEvent OnPlayerAuthenticated;

        private void Start()
        {
            Init();
        }

        private void Init()
        {
            PlayRealManager.Instance.ServerConnection.ConnectedToServerEvent += ServerConnection_ConnectedToServerEvent;
            PlayRealManager.Instance.ServerConnection.AsyncConnectedEvent += ServerConnection_AsyncConnectedRequestEvent;

            PlayRealManager.Instance.ServerConnection.Connect();
        }

        private void ServerConnection_ConnectedToServerEvent()
        {
            PlayRealManager.Instance.ServerConnection.AuthenticateUser(Login, Password, "SW", null, com.daysofwonder.game.push.Devices.Type.STEAM, null);
        }

        /// <summary>
        /// Event called when the user is authenticated on the server
        /// </summary>
        /// <param name="asyncConnectedRequest"></param>
        private void ServerConnection_AsyncConnectedRequestEvent(AsyncConnectedRequest asyncConnectedRequest)
        {
            PlayRealManager.Instance.Persistence.Session = asyncConnectedRequest.session;
            PlayRealManager.Instance.Persistence.ConnectedPlayer = asyncConnectedRequest.player;

            OnPlayerAuthenticated.Invoke();
        }

        /// <summary>
        /// Dispose events and logic
        /// </summary>
        private void OnDestroy()
        {
            PlayRealManager.Instance.ServerConnection.ConnectedToServerEvent -= ServerConnection_ConnectedToServerEvent;
            PlayRealManager.Instance.ServerConnection.AsyncConnectedEvent -= ServerConnection_AsyncConnectedRequestEvent;
        }
    }
}
