﻿using UnityEngine;
using UnityEngine.Serialization;
using System.Collections;

namespace Nostalgia.Example
{
	[AddComponentMenu("Nostalgia/Example/MessageTrigger")]
	public sealed class MessageTrigger : MonoBehaviour, IActionTrigger
	{
		[TextArea] public string defaultMessage;
		[System.Serializable]
		public class Message
		{
			public SystemLanguage language;
			[TextArea]
			public string text;
		}
		public Message[] messages;
		public float messageWait = 0.05f;
		public string onTileName;

		private CellObject _CellObject;
		private Tile _OnTile;
		private Tile _OffTile;

		private string _Message;

		void InitializeOnOffTile()
		{
			if (_CellObject == null)
			{
				_CellObject = GetComponent<CellObject>();

				if (_CellObject != null && _CellObject.map.tileSet != null)
				{
					_OnTile = _CellObject.map.tileSet.FindTile(onTileName);
					_OffTile = _CellObject.cell.tile;
				}
			}
		}

		void Awake()
		{
			_Message = defaultMessage;
			if (messages != null)
			{
				SystemLanguage language = Application.systemLanguage;
				int messageCount = messages.Length;
				for (int messageIndex = 0; messageIndex < messageCount; messageIndex++)
				{
					Message message = messages[messageIndex];
					if (message.language == language)
					{
						_Message = message.text;
						break;
					}
				}
			}
		}

		void IActionTrigger.OnEnter(Player player)
		{
			InitializeOnOffTile();

			if (_OnTile != null)
			{
				_CellObject.SetTile(_OnTile, 0, Vector2Int.zero, false, false);
			}
		}

		void IActionTrigger.OnExit(Player player)
		{
			_CellObject.SetTile(_OffTile, 0, Vector2Int.zero, false, false);
		}

		void IActionTrigger.OnAction(Player player)
		{
			MessageBoard.Open(_Message, messageWait);
		}
	}
}
