package com.imyeyu.fx.ui.components.alert;

import com.imyeyu.java.TimiJava;
import javafx.geometry.Insets;
import javafx.scene.control.Label;
import javafx.scene.control.TextInputControl;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Region;
import lombok.Getter;

/**
 * 抽象输入弹窗
 *
 * @author 夜雨
 * @since 2022-04-07 10:51
 */
public abstract class AbstractAlertInput<T extends TextInputControl> extends AbstractAlert {

	/** 输入组件 */
	@Getter
	protected final T input;

	/** 提示标签组件 */
	@Getter
	protected final Label tips;

	/** 内容面板 */
	protected final BorderPane content;

	/**
	 * 输入弹窗
	 *
	 * @param t     输入组件
	 * @param title 标题
	 */
	public AbstractAlertInput(T t, String title) {
		this(t, AlertType.INFORMATION, title, "", "", AlertButton.confirm(), AlertButton.cancel());
	}

	/**
	 * 输入弹窗
	 *
	 * @param t       输入组件
	 * @param type    弹窗类型
	 * @param title   标题
	 * @param content 内容
	 * @param text    预设输入框文本
	 * @param buttons    可控按钮
	 */
	public AbstractAlertInput(T t, AlertType type, String title, String content, String text, AlertButton... buttons) {
		tips = new Label(content);
		tips.setTextFill(GRAY);
		tips.setWrapText(true);
		tips.visibleProperty().bind(tips.textProperty().isNotEmpty());
		tips.managedProperty().bind(tips.visibleProperty());
		input = t;
		input.setText(text);
		if (input.getPrefWidth() == Region.USE_COMPUTED_SIZE) {
			tips.setPrefWidth(360);
			input.setPrefWidth(360);
		}

		root.setCenter(this.content = new BorderPane() {{
			setMargin(tips, new Insets(4, 6, 4, 6));
			setPadding(PADDING_CONTENT);
			setTop(tips);
			setCenter(input);
		}});

		setResizable(false);
		setType(type);

		if (TimiJava.isNotEmpty(title)) {
			setTitle(title);
		}
		putButtons(buttons);
	}

	/**
	 * 获取输入的文本
	 *
	 * @return 输入的文本
	 */
	public String getText() {
		return input.getText();
	}

	/**
	 * 设置提示
	 *
	 * @param tips 提示文本
	 */
	public void setTips(String tips) {
		this.tips.setText(tips);
	}
}
