package com.imyeyu.fx.ui.components.popup.tips;

import com.imyeyu.fx.ui.TimiFXUI;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.scene.Node;

/**
 * 抽象弹出提示对象
 *
 * @author 夜雨
 * @since 2023-02-13 12:37
 */
public class AbstractPopupTips<T extends Node> implements TimiFXUI {

	/** 是否启用 */
	protected final BooleanProperty enable;

	/** 是否保持显示 */
	protected final BooleanProperty keepShow;

	/** 组件 */
	protected final ObjectProperty<T> node;

	/** 默认构造 */
	public AbstractPopupTips() {
		this(null);
	}

	/**
	 * 标准构造
	 *
	 * @param node 提示内容组件
	 */
	public AbstractPopupTips(T node) {
		enable = new SimpleBooleanProperty(true);
		keepShow = new SimpleBooleanProperty(false);
		this.node = new SimpleObjectProperty<>(node);
	}

	/**
	 * 获取是否启用提示
	 *
	 * @return true 为启用
	 */
	public boolean isEnable() {
		return enable.get();
	}

	/**
	 * 获取是否启用提示属性
	 *
	 * @return 是否启用提示属性
	 */
	public BooleanProperty enableProperty() {
		return enable;
	}

	/**
	 * 设置是否启用提示
	 *
	 * @param enable true 为启用
	 */
	public void setEnable(boolean enable) {
		this.enable.set(enable);
	}

	/**
	 * 获取是否保持显示，鼠标移出触发组件时也保持显示
	 *
	 * @return true 为保持显示
	 */
	public boolean isKeepShow() {
		return keepShow.get();
	}

	/**
	 * 获取是否保持显示属性
	 *
	 * @return 是否保持显示属性
	 */
	public BooleanProperty keepShowProperty() {
		return keepShow;
	}

	/**
	 * 设置是否保持显示，鼠标移出触发组件时也保持显示
	 *
	 * @param keepShow true 为保持显示
	 */
	public void setKeepShow(boolean keepShow) {
		this.keepShow.set(keepShow);
	}

	/**
	 * 获取弹出显示的组件
	 *
	 * @return 弹出显示组件
	 */
	public T getNode() {
		return node.get();
	}

	/**
	 * 获取弹出显示组件属性
	 *
	 * @return 弹出显示组件属性
	 */
	public ObjectProperty<T> nodeProperty() {
		return node;
	}

	/**
	 * 设置弹出显示组件
	 *
	 * @param node 弹出显示组件
	 */
	public void setNode(T node) {
		this.node.set(node);
	}
}
