package com.ttv.acs.stub.adi;

import java.util.List;

import com.tandbergtv.workflow.message.WorkflowPayload;
import com.ttv.acs.util.PConstants;

/**
 * This class is responsible for  
 */
public class IngestWorkOrderRequest extends AbstractWorkOrderRequest{
	private static final String MESSAGE_UID = "AD0101";
	private String metadataFilePath = "";
	private String assetFileNames = "";
	private String success = "";
	private String message = "";
	private String packageAssetID = "";
	private String providerId = "";

	public IngestWorkOrderRequest() {
		super(MESSAGE_UID);
	}

	public IngestWorkOrderRequest(String metadataFilePath, boolean provisionResult, List<String> provisionErrorMsgs, ADI adi) {
		super(MESSAGE_UID);
		
		this.metadataFilePath = metadataFilePath;
		setProvisionResult(provisionResult);

		if (provisionErrorMsgs != null) {
			StringBuffer errorMsgSB = new StringBuffer();
			for (String error : provisionErrorMsgs) {
				errorMsgSB.append(error + ";");
			}
			if (errorMsgSB.length() > 0) {
				this.message = errorMsgSB.substring(0, errorMsgSB.length() - 1);
			}
		}

		setADI(adi);
	}

	public IngestWorkOrderRequest(String metadataFilePath, boolean provisionResult, String provisionErrorMsgs, ADI adi) {
		super(MESSAGE_UID);
		
		this.metadataFilePath = metadataFilePath;
		setProvisionResult(provisionResult);

		setMessage(provisionErrorMsgs);

		setADI(adi);
	}

	public IngestWorkOrderRequest(String contentUrl, Exception e) {
		super(MESSAGE_UID);
		
		setProvisionResult(false);
		setMessage("Exception throwed when provisioning for file: " + contentUrl + ". Exception thrown: "
				+ e.getMessage());
	}

	public void setProvisionResult(boolean provisionResult) {
		if (provisionResult) {
			success = PConstants.INGEST_SUCCESS;
		} else {
			success = PConstants.INGEST_FAILURE;
		}
	}

	public void setADI(ADI adi) {
		if (adi == null) {
			return;
		}

		if (adi.getAssets() != null) {
			StringBuffer assetFileNamesSB = new StringBuffer();
			for (Asset asset : adi.getAssets()) {
				assetFileNamesSB.append(asset.getPath() + ",");
			}

			if (assetFileNamesSB.length() > 0) {
				this.assetFileNames = assetFileNamesSB.substring(0, assetFileNamesSB.length() - 1);
			}
		}

		if (adi.getMetadata() != null) {
			this.packageAssetID = adi.getMetadata().getAssetId();
			this.providerId = adi.getMetadata().getProviderId();
		}
	}

	public String getMetadataFilePath() {
		return metadataFilePath;
	}

	public void setMetadataFilePath(String metadataFilePath) {
		this.metadataFilePath = metadataFilePath;
	}

	public String getAssetFileNames() {
		return assetFileNames;
	}

	public void setAssetFileNames(String assetFileNames) {
		this.assetFileNames = assetFileNames;
	}

	public String getSuccess() {
		return success;
	}

	public void setSuccess(String success) {
		this.success = success;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public String getPackageAssetID() {
		return packageAssetID;
	}

	public void setPackageAssetID(String packageAssetID) {
		this.packageAssetID = packageAssetID;
	}

	public String getProviderId() {
		return providerId;
	}

	public void setProviderId(String providerId) {
		this.providerId = providerId;
	}

	@Override
	public String toString() {
		StringBuffer result = new StringBuffer();
		result.append("metadataFilePath: " + metadataFilePath + "\n");
		result.append("assetFileNames: " + assetFileNames + "\n");
		result.append("success: " + success + "\n");
		result.append("message: " + message + "\n");
		result.append("packageAssetID: " + packageAssetID + "\n");
		result.append("providerId: " + providerId + "\n");

		return result.toString();
	}

	@Override
	public void populatePayload(WorkflowPayload payload) {
		payload.putValue(PConstants.WFS_PARAM_METADATA_FILEPATH, getMetadataFilePath());
		payload.putValue(PConstants.WFS_PARAM_ASSET_FILENAMES, getAssetFileNames());
		payload.putValue(PConstants.WFS_PARAM_SUCCESS, getSuccess());
		payload.putValue(PConstants.WFS_PARAM_MESSAGE, getMessage());
		payload.putValue(PConstants.WFS_PARAM_PACKAGE_ASSETID, getPackageAssetID());
		payload.putValue(PConstants.WFS_PARAM_PROVIERID, getProviderId());
	}

	@Override
	public boolean succeeded() {
		return PConstants.INGEST_SUCCESS.equals(getSuccess());
	}

	@Override
	public String getMessageUID() {
		return MESSAGE_UID;
	}
}
