﻿using JLGames.RocketDriver.Actions.Extensions;
using JLGames.RocketDriver.Actions.i18n;
using UnityEngine;
using UnityEngine.UIElements;

namespace JLGames.RocketDriver.Editor.Windows.GettingStarted
{
    internal class RateElement
    {
        private readonly Label m_Title;
        private readonly Label m_Content;
        private readonly Button m_Button;
        private string m_Page;

        public Label Title => m_Title;
        public Label Content => m_Content;
        public Button Button => m_Button;

        public RateElement(VisualElement rateNode)
        {
            m_Title = rateNode.GetElementByChain<Label>("container/texts/title");
            m_Content = rateNode.GetElementByChain<Label>("container/texts/content");
            m_Button = rateNode.GetElementByChain<Button>("container/buttons/btn0");
        }

        public void UpdateValues(II18NManager i18NManager)
        {
            if (null == m_Title || null == i18NManager) return;
            m_Title.text = i18NManager.GetValue($"start.rate.title");
            m_Content.text = i18NManager.GetValue("start.rate.content");
            m_Button.text = i18NManager.GetValue("start.rate.button");
            m_Page = i18NManager.GetValue("start.rate.page");
        }

        public void RegisterButtonsCallback()
        {
            m_Button.RegisterCallback<MouseUpEvent, string>(OnClickButton, m_Button.viewDataKey);
        }

        public void UnregisterButtonsCallback()
        {
            m_Button.UnregisterCallback<MouseUpEvent, string>(OnClickButton);
        }

        private void OnClickButton(MouseUpEvent evt, string data)
        {
            OpenUrl(m_Page);
        }

        private void OpenUrl(string url)
        {
            if (!string.IsNullOrEmpty(url))
            {
                Application.OpenURL(url);
            }
        }
    }
}