using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;

public class DialogueBox : MonoBehaviour {

    string ActorName = "ActorName";
    string DialogueText = "DialogueText";

    TextElement[] Buttons = new TextElement[5];
    
    public void OnEnable() {
        var uiDocument = GetComponent<UIDocument>();
        VisualElement 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[0] = GetComponent<UIDocument>().rootVisualElement.Q<Button>("Button1");
        Buttons[1] = GetComponent<UIDocument>().rootVisualElement.Q<Button>("Button2");
        Buttons[2] = GetComponent<UIDocument>().rootVisualElement.Q<Button>("Button3");
        Buttons[3] = GetComponent<UIDocument>().rootVisualElement.Q<Button>("Button4");
        Buttons[4] = GetComponent<UIDocument>().rootVisualElement.Q<Button>("Button5");

        setActor(ActorName);
        setText(DialogueText);

        Buttons[0].RegisterCallback<MouseUpEvent>((e) => {
        GetComponent<StateMachine>().nextNote(0);     
        });

        Buttons[1].RegisterCallback<MouseUpEvent>((e) => {
        GetComponent<StateMachine>().nextNote(1);       
        });

        Buttons[2].RegisterCallback<MouseUpEvent>((e) => {
            GetComponent<StateMachine>().nextNote(2);
        });

        Buttons[3].RegisterCallback<MouseUpEvent>((e) => {
            GetComponent<StateMachine>().nextNote(3);
        });

        Buttons[4].RegisterCallback<MouseUpEvent>((e) => {
            GetComponent<StateMachine>().nextNote(4);
        });

    }

    public void setActor(string actor) {
        GetComponent<UIDocument>().rootVisualElement.Q<Label>("Actor").text = actor;
    }

    public void setText(string text) {
        GetComponent<UIDocument>().rootVisualElement.Q<TextElement>("Dialogue").text = text;
    }

    public void setTransitions(StateMachine.Transition[] transitions) {
        for (int i = 0; i < 5; i++) {
            if (i < transitions.Length) {
                Buttons[i].visible = true;
                Buttons[i].text = transitions[i].TransitionName;
            }
            else {
                Buttons[i].visible = false;
            }
        }
    }

    public void setNote(string Actor, string Dialogue) {
        setActor(Actor);
        setText(Dialogue);
    }

    public void hideButton(int count)
    {
        Buttons[count].visible = false;  
    }

    public void showButton(int count)
    {
        Buttons[count].visible = true;
    }

}