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

import com.imyeyu.java.TimiJava;
import javafx.scene.control.Label;
import javafx.stage.Window;
import lombok.Getter;

/**
 * 弹窗提示
 *
 * @author 夜雨
 * @since 2022-01-07 11:29
 */
@Getter
public class AlertTips extends AbstractAlert {

	/** 提示标签 */
	protected final Label tips;

	/**
	 * 弹窗提示
	 *
	 * @param content 内容
	 */
	public AlertTips(String content) {
		this(AlertType.INFORMATION, null, content, AlertButton.close());
	}

	/**
	 * 弹窗提示
	 *
	 * @param content 内容
	 * @param buttons    可控按钮
	 */
	public AlertTips(String content, AlertButton... buttons) {
		this(AlertType.INFORMATION, null, content, buttons);
	}

	/**
	 * 弹窗提示
	 *
	 * @param type 类型
	 * @param buttons 可控按钮
	 */
	public AlertTips(AlertType type, AlertButton... buttons) {
		this(type, null, "", buttons);
	}

	/**
	 * 弹窗提示
	 *
	 * @param type    类型
	 * @param content 内容
	 */
	public AlertTips(AlertType type, String content) {
		this(type, null, content, AlertButton.close());
	}

	/**
	 * 弹窗提示
	 *
	 * @param type    类型
	 * @param content 内容
	 * @param buttons    可控按钮
	 */
	public AlertTips(AlertType type, String content, AlertButton... buttons) {
		this(type, null, content, buttons);
	}

	/**
	 * 弹窗提示
	 *
	 * @param type    类型
	 * @param title   标题
	 * @param content 内容
	 * @param buttons    可控按钮
	 */
	public AlertTips(AlertType type, String title, String content, AlertButton... buttons) {
		tips = new Label(content);
		tips.setPadding(PADDING_CONTENT);
		tips.setWrapText(true);
		tips.setPrefWidth(360);

		root.setCenter(tips);
		setResizable(false);
		setType(type);

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

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

	// ---------- 快速构造 ----------

	/**
	 * 快速弹出提示
	 *
	 * @param owner   显示相对窗体
	 * @param content 提示内容
	 * @return 弹窗对象
	 */
	public static AlertTips info(Window owner, String content) {
		AlertTips alert = new AlertTips(AlertType.INFORMATION, content);
		alert.autoSize();
		alert.showRelativeCenter(owner);
		return alert;
	}

	/**
	 * 快速弹出警告
	 *
	 * @param owner   显示相对窗体
	 * @param content 警告内容
	 * @return 弹窗对象
	 */
	public static AlertTips warn(Window owner, String content) {
		AlertTips alert = new AlertTips(AlertType.WARNING, content);
		alert.autoSize();
		alert.showRelativeCenter(owner);
		return alert;
	}

	/**
	 * 快速弹出严重警告
	 *
	 * @param owner   显示相对窗体
	 * @param content 警告内容
	 * @return 弹窗对象
	 */
	public static AlertTips warnDanger(Window owner, String content) {
		AlertTips alert = new AlertTips(AlertType.WARNING_DANGER, content);
		alert.autoSize();
		alert.showRelativeCenter(owner);
		return alert;
	}

	/**
	 * 快速弹出错误
	 *
	 * @param owner   显示相对窗体
	 * @param content 错误内容
	 * @return 弹窗对象
	 */
	public static AlertTips error(Window owner, String content) {
		AlertTips alert = new AlertTips(AlertType.ERROR, content);
		alert.autoSize();
		alert.showRelativeCenter(owner);
		return alert;
	}
}
