using UnityEngine;

namespace mgaia.Utils.Text
{
    /// <summary>
    /// Representa um componente que pega o texto localizado e seta ele automaticamente na TextMesh
    /// </summary>
    /// <owner>Victor</owner>
    [DisallowMultipleComponent]
    public abstract class ILocalizedTextMesh : MonoBehaviour
    {
		[SerializeField]
		private string _session;

        [SerializeField]
        private string[] _keys;

        [SerializeField]
        private bool _fit = true;

		[SerializeField]
		private bool _toUpper = false;

        private ITextMesh mTargetTextMesh;

        private void Awake()
        {
            mTargetTextMesh = GetTargetTextMesh();

            Assert.AssertTrue(mTargetTextMesh != null, "TargetTextMesh não pode ser nulo!");
			Assert.AssertTrue(_keys != null && _keys.Length > 0, "Deve haver pelo menos uma key de localização!");
        }

        private void Start()
        {
			string localizedText = LocalizationManager.GetConcatenatedTexts(_session, _keys);
			if (_toUpper)
			{
				localizedText = localizedText.ToUpperInvariant();
			}

			if (_fit)
			{
				TextMeshFormatter.FormatTextMeshFollowingTemplate(mTargetTextMesh, localizedText, true);
			}
			else
			{
				mTargetTextMesh.Text = localizedText;
			}
        }

        protected abstract ITextMesh GetTargetTextMesh();
    }
}