package io.github.ecsoya.fabric;

import org.hyperledger.fabric.sdk.BlockEvent.TransactionEvent;

public class FabricResponse {

	public static final int SUCCESS = 1;
	public static final int FAILURE = -505;

	public final int status;

	public final String errorMsg;

	/**
	 * The transaction id of execution.
	 */
	private String transactionId;

	public FabricResponse(int status, String errorMsg) {
		this.status = status;
		this.errorMsg = errorMsg;
	}

	public boolean isOk() {
		return status == SUCCESS;
	}

	public boolean isOk(boolean all) {
		return isOk();
	}

	public FabricResponse setTransactionId(String transactionId) {
		this.transactionId = transactionId;
		return this;
	}

	public String getTransactionId() {
		return transactionId;
	}

	public static FabricResponse fail(String errorMsg) {
		return new FabricResponse(FAILURE, errorMsg);
	}

	public static FabricResponse ok() {
		return new FabricResponse(SUCCESS, null);
	}

	public static FabricResponse create(TransactionEvent event) {
		if (event == null) {
			return fail("Invalid transaction event");
		}
		FabricResponse res = new FabricResponse(SUCCESS, null);
		res.setTransactionId(event.getTransactionID());
		return res;
	}

}