package com.ttv.acs.stub.adi;

import com.tandbergtv.workflow.message.WorkflowPayload;
import com.ttv.acs.util.PConstants;

/**
 * Represents a request for a work order to be started after a title has been ingested
 * 
 * @author carlos
 * 
 */
public class PostIngestWorkOrderRequest extends AbstractWorkOrderRequest {

	private static final String MESSAGE_UID = "AD0101";

	private Long titleId;
	private String metadataFilePath;
	private String success;
	private String message;
	private String validationSuccess;
	private String validationMessage;
	private String packageAssetID;
	private String providerId;
	private String titleStatus;

	public PostIngestWorkOrderRequest(Long titleId, String titleStatus, String metadataFilePath, boolean success, String message,
			boolean validationSuccess, String validationMessage, String packageAssetID, String providerId) {

		super(MESSAGE_UID);

		this.titleId = titleId;
		this.titleStatus = titleStatus;
		this.metadataFilePath = metadataFilePath;
		this.success = success ? PConstants.INGEST_SUCCESS : PConstants.INGEST_FAILURE;
		this.message = message;
		this.validationSuccess = validationSuccess ? Boolean.TRUE.toString() : Boolean.FALSE.toString();
		this.validationMessage = validationMessage;
		this.packageAssetID = packageAssetID;
		this.providerId = providerId;
	}

	public String getTitleStatus() {
		return titleStatus;
	}

	public String getValidationSuccess() {
		return validationSuccess;
	}

	public String getValidationMessage() {
		return validationMessage;
	}

	@Override
	public String toString() {
		StringBuilder result = new StringBuilder();

		appendParam(result, PConstants.WFS_PARAM_TITLE_ID, getTitleId());
		appendParam(result, PConstants.WFS_PARAM_TITLE_STATUS, getTitleStatus());
		appendParam(result, PConstants.WFS_PARAM_METADATA_FILEPATH, getMetadataFilePath());
		appendParam(result, PConstants.WFS_PARAM_SUCCESS, getSuccess());
		appendParam(result, PConstants.WFS_PARAM_MESSAGE, getMessage());
		appendParam(result, PConstants.WFS_PARAM_SUCCESS, getValidationSuccess());
		appendParam(result, PConstants.WFS_PARAM_MESSAGE, getValidationMessage());
		appendParam(result, PConstants.WFS_PARAM_PACKAGE_ASSETID, getPackageAssetID());
		appendParam(result, PConstants.WFS_PARAM_PROVIERID, getProviderId());

		return result.toString();
	}

	private void appendParam(StringBuilder sb, String param, Object value) {
		sb.append(param);
		sb.append(": ");
		sb.append(value);
		sb.append("\n");
	}

	@Override
	public void populatePayload(WorkflowPayload payload) {
		putValue(payload, PConstants.WFS_PARAM_TITLE_ID, getTitleId());
		putValue(payload, PConstants.WFS_PARAM_TITLE_STATUS, getTitleStatus());
		putValue(payload, PConstants.WFS_PARAM_METADATA_FILEPATH, getMetadataFilePath());
		putValue(payload, PConstants.WFS_PARAM_SUCCESS, getSuccess());
		putValue(payload, PConstants.WFS_PARAM_MESSAGE, getMessage());
		putValue(payload, PConstants.WFS_PARAM_VALIDATION_SUCCESS, getValidationSuccess());
		putValue(payload, PConstants.WFS_PARAM_VALIDATION_MESSAGE, getValidationMessage());
		putValue(payload, PConstants.WFS_PARAM_PACKAGE_ASSETID, getPackageAssetID());
		putValue(payload, PConstants.WFS_PARAM_PROVIERID, getProviderId());
	}

	public Long getTitleId() {
		return titleId;
	}

	public String getMetadataFilePath() {
		return metadataFilePath;
	}

	public String getSuccess() {
		return success;
	}

	public String getMessage() {
		return message;
	}

	public String getPackageAssetID() {
		return packageAssetID;
	}

	public String getProviderId() {
		return providerId;
	}

	@Override
	public boolean succeeded() {
		return PConstants.INGEST_SUCCESS.equals(getSuccess());
	}

}
