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

import com.imyeyu.io.IO;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.BooleanBinding;
import javafx.beans.property.ObjectProperty;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Background;
import javafx.scene.layout.Border;
import javafx.scene.layout.StackPane;

import java.io.File;
import java.io.FileNotFoundException;

/**
 * 图片弹出提示
 *
 * @author 夜雨
 * @since 2023-02-13 13:09
 */
public class PopupTipsImage extends AbstractPopupTips<StackPane> {

	private final ImageView imageView;

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

	/**
	 * 默认构造
	 *
	 * @param url 图片 URL
	 */
	public PopupTipsImage(String url) {
		this(new Image(url));
	}

	/**
	 * 默认构造
	 *
	 * @param image 图片对象
	 */
	public PopupTipsImage(Image image) {
		super(new StackPane());
		getNode().getChildren().setAll(imageView = new ImageView(image));

		BooleanBinding emptyImage = imageView.imageProperty().isNull();
		getNode().borderProperty().bind(Bindings.when(emptyImage).then(Border.EMPTY).otherwise(Stroke.DEFAULT));
		getNode().backgroundProperty().bind(Bindings.when(emptyImage).then(Background.EMPTY).otherwise(BG.DEFAULT));
		enable.bind(emptyImage.not());
	}

	/**
	 * 设置显示图片
	 *
	 * @param url 图片地址
	 */
	public void setImage(String url) {
		imageView.setImage(new Image(url));
	}

	/**
	 * 设置显示图片
	 *
	 * @param file 图片文件
	 * @throws FileNotFoundException 找不到文件
	 */
	public void setImage(File file) throws FileNotFoundException {
		imageView.setImage(new Image(IO.getInputStream(file)));
	}

	/**
	 * 设置显示图片
	 *
	 * @param image 图片
	 */
	public void setImage(Image image) {
		imageView.setImage(image);
	}

	/** 清除图片 */
	public void clear() {
		imageView.setImage(null);
	}

	/**
	 * 获取显示的图片
	 *
	 * @return 图片
	 */
	public Image getImage() {
		return imageView.getImage();
	}

	/**
	 * 获取图片属性
	 *
	 * @return 图片属性
	 */
	public ObjectProperty<Image> imageProperty() {
		return imageView.imageProperty();
	}
}
