package cn.forevermc.launcher.bean;

import cn.forevermc.launcher.util.Path;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.ReadOnlyBooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleDoubleProperty;
import lombok.Data;
import com.imyeyu.io.IO;
import com.imyeyu.utils.Digest;

import java.io.File;

/**
 * 文件下载对象
 *
 * @author 夜雨
 * @since 2022-11-21 11:22
 */
@Data
public class FileDownload {

	/** 本地文件对象 */
	private File file;

	/** 大小 */
	private Long size;

	/** 请求 URL */
	private String url;

	/** 哈希 */
	private String hash;

	/** 显示名称 */
	private String displayName;

	/** 进度 */
	private DoubleProperty progress;

	/** true 为下载错误 */
	private BooleanProperty isError;

	/** 重试次数 */
	private int retry = 0;

	public FileDownload(File file) {
		this.file = file;
		this.displayName = file.getAbsolutePath().substring(file.getAbsolutePath().indexOf(Path.P_ROOT));

		progress = new SimpleDoubleProperty(0);
		isError = new SimpleBooleanProperty(false);
	}

	/** @return true 为存在且 HASH 匹配 */
	public boolean exist() throws Exception {
		return file.exists() && hash.equals(Digest.sha1(IO.toBytes(file)));
	}

	/** @return 文件名 */
	public String getFileName() {
		return file.getName();
	}

	/** @return 进度监听 */
	public DoubleProperty progressProperty() {
		return progress;
	}

	/** @param isError true 为下载错误 */
	public void setError(boolean isError) {
		this.isError.set(isError);
	}

	/** @return 错误监听，只读 */
	public ReadOnlyBooleanProperty errorProperty() {
		return isError;
	}
}
