using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;

[RequireComponent(typeof(UIDocument))]
public class DialogueBox : MonoBehaviour {
    private UIDocument uiDocument;
    private VisualElement root;
    private Button[] buttons;


    public void Awake() {
        uiDocument = GetComponent<UIDocument>();
    }

    public void OnEnable() {
        root = uiDocument.rootVisualElement;
        var visualTree = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Assets/UI/DialogueBox/DialogueBox.uxml");
        var styleSheet = AssetDatabase.LoadAssetAtPath<StyleSheet>("Assets/UI/DialogueBox/DialogueBox.uss");
        VisualElement tree = visualTree.CloneTree();
        tree.styleSheets.Add(styleSheet);
        root.Add(tree);
        buttons = root.Query<Button>().ToList().ToArray();

        SetActor("ActorName");
        SetText("DialogueText");

        for(var i = 0; i < buttons.Length; i++) {
            var index = i;
            buttons[i].RegisterCallback<MouseUpEvent>(_ => GetComponent<Storyline>().ApplyTransition(index));
        }
    }

    public void SetActor(string actor) {
        root.Q<Label>("Actor").text = actor;
    }

    public void SetText(string text) {
        root.Q<TextElement>("Dialogue").text = text;
    }

    public void SetTransitions(Storyline.Transition[] transitions) {
        for(var i = 0; i < buttons.Length; i++) {
            if(i < transitions.Length) {
                buttons[i].visible = true;
                buttons[i].text = transitions[i].transitionText;
            }
            else {
                buttons[i].visible = false;
            }
        }
    }
}