﻿#if UNITY_EDITOR
#define TMP_PRESENT
#endif
#if TMP_PRESENT
using JLGames.RocketDriver.CSharp.Event;
using TMPro;
using UnityEngine;

namespace JLGames.RocketDriver.Actions.i18n
{
    public class I18NTMPText : MonoBehaviour
    {
        [SerializeField] private TMP_Text m_Text;
        [SerializeField] private string m_FileKey;
        [SerializeField] private string m_TextContent;
        [SerializeField] private bool m_AutoRefresh;

        private void Awake()
        {
            if (null == m_Text) m_Text = GetComponent<TMP_Text>();
        }

        private void Start()
        {
            if (string.IsNullOrEmpty(m_TextContent)) return;
            UpdateText();
        }

        private void OnEnable()
        {
            if (m_AutoRefresh)
            {
                AddI18NListeners();
            }
        }

        private void OnDisable()
        {
            if (m_AutoRefresh)
            {
                RemoveI18NListeners();
            }
        }

        public string TextContent
        {
            get { return m_TextContent; }
            set
            {
                if (m_TextContent == value) return;
                if (string.IsNullOrEmpty(value)) m_TextContent = "";
                else m_TextContent = value;
                UpdateText();
            }
        }

        public bool AutoRefresh
        {
            get { return m_AutoRefresh; }
            set
            {
                if (m_AutoRefresh == value) return;
                if (m_AutoRefresh)
                {
                    RemoveI18NListeners();
                }

                m_AutoRefresh = value;
                if (m_AutoRefresh)
                {
                    AddI18NListeners();
                }
            }
        }

        public void Refresh()
        {
            UpdateText();
        }

        private void AddI18NListeners()
        {
            I18NManagerShared.Manager.AddEventListener(I18NEvents.EventDataLoaded, OnI18NDataLoaded);
        }

        private void RemoveI18NListeners()
        {
            I18NManagerShared.Manager.RemoveEventListener(I18NEvents.EventDataLoaded, OnI18NDataLoaded);
        }

        private void OnI18NDataLoaded(EventData evd)
        {
            UpdateText();
        }

        private void UpdateText()
        {
            var t = m_Text;
            if (null == t) return;
            t.text = I18NManagerShared.Manager.GetContent(m_TextContent, m_FileKey);
        }
    }
}
#endif