/*
 *
 * AbstractNode
 *
 * This is the general definition of everything that is allowed inside a node and is called by our system
 *
 *
*/

package jesse.keeblarcraft.AttributeMgr.AttributeNodes;

import java.util.HashMap;
import java.util.List;

abstract public class AbstractNode {
    /////////////////////////////////////////////////////////////////////////////
    /// @fn         GetNodeTitle
    ///
    /// @brief      The title of your node/skill!
    /////////////////////////////////////////////////////////////////////////////
    public abstract String GetNodeTitle();

    /////////////////////////////////////////////////////////////////////////////
    /// @fn         GetNodeDescription
    ///
    /// @brief      This will become the hover-over text display of a skill in
    ///             the skill tree
    /////////////////////////////////////////////////////////////////////////////
    public abstract String GetNodeDescription();

    /////////////////////////////////////////////////////////////////////////////
    /// @fn         GetDetails
    ///
    /// @brief      This is the general details that may be displayed inside the
    ///             GUI when the skill tree becomes available to a player. The
    ///             object is suggested to be treated as such:
    ///
    ///             KEY (String)       -> The title of an effect/attribute
    ///             VAL (List<String>) -> Treated as a list of description
    ///                                   attributes. 1 string per description
    /////////////////////////////////////////////////////////////////////////////
    public abstract HashMap<String, List<String>> GetDetails();

    /////////////////////////////////////////////////////////////////////////////
    /// @fn         RegisterCallbacks
    ///
    /// @brief      If your node has responsive callbacks; then this is the area
    ///             you will register your callbacks for everything
    /////////////////////////////////////////////////////////////////////////////
    public abstract void RegisterCallbacks();
}
