﻿using HutongGames.PlayMaker;

namespace Dissonance.Integrations.PlayMaker
{
    [ActionCategory("Dissonance Voice Comms")]
    [Tooltip("Joins a Dissonance voice chat room, allowing the player to receive messages broadcast to the room.")]
    public class ReceiveChatRoomMessages : FsmStateAction
    {
        [Tooltip("The name of the chat room to join.")]
        [RequiredField]
        public FsmString roomName;

        private DissonanceComms _comms;
        private RoomMembership? _membership;

        public override void Awake()
        {
            base.Awake();

            _comms = GetVoiceComms();

            if (ReferenceEquals(_comms, null))
                LogError("Cannot find a DissonanceVoiceComms component in the scene.");
        }

        public override void Reset()
        {
            roomName.Value = null;
        }

        public override void OnEnter()
        {
            if (roomName.IsNone || roomName.Value == null)
            {
                LogWarning("Room name not set.");
                return;
            }

            var comms = GetVoiceComms();
            if (comms != null)
                _membership = comms.Rooms.Join(roomName.Value);
        }

        public override void OnExit()
        {
            var comms = GetVoiceComms();
            if (comms != null && _membership != null)
            {
                comms.Rooms.Leave(_membership.Value);
                _membership = null;
            }
        }

        private DissonanceComms GetVoiceComms()
        {
            if (_comms == null)
                _comms = UnityEngine.Object.FindObjectOfType<DissonanceComms>();

            return _comms;
        }
    }
}
