package com.tandbergtv.watchpoint.contentmgmt.communication.handlers;

import org.apache.log4j.Logger;

import com.tandbergtv.watchpoint.communication.Util;
import com.tandbergtv.watchpoint.pmm.communication.HandlerErrorCode;
import com.tandbergtv.watchpoint.pmm.communication.MessageHandler;
import com.tandbergtv.watchpoint.pmm.communication.MessageHandlerException;
import com.tandbergtv.watchpoint.pmm.util.RulesEngineFacade;
import com.tandbergtv.workflow.message.IMessageKey;
import com.tandbergtv.workflow.message.IMessageUID;
import com.tandbergtv.workflow.message.WorkflowMessage;
import com.tandbergtv.workflow.message.WorkflowMessage.MessageType;

/**
 * Sends a title ingested event to the rules engine.
 * 
 * @author spuranik
 *
 */
public class SendTitleIngestedEventToRulesEngine implements MessageHandler {

	/* constants for the message */
	private static String TITLE_ID = "titleId";
	
	private static final Logger logger = Logger.getLogger(SendTitleIngestedEventToRulesEngine.class);
	
	@Override
	public WorkflowMessage handleMessage(WorkflowMessage message) throws Exception {
		// validate the input.
		Util.validateRequired(message, TITLE_ID);
		
		long titleId = Util.getLongValue(message, TITLE_ID);
		
		try {
			RulesEngineFacade.sendIngestedEvent(titleId);
		} catch (Throwable t) {
			logger.error("Error while sending title ingested event to RulesEngine: ", t);
			throw new MessageHandlerException(HandlerErrorCode.RUNTIME_ERROR, t.getLocalizedMessage());
		}
		
		/* If there were no errors, build the ack response message */
		IMessageUID uid = message.getMessageUID();
		IMessageKey key = message.getKey();
		return new WorkflowMessage(uid, key, MessageType.ack);
	}

}
