package br.com.microsoft.ocp.bot.service.jmeter.callback.server;

import javax.json.bind.Jsonb;
import javax.json.bind.JsonbBuilder;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import br.com.microsoft.ocp.bot.service.jmeter.plugin.schemas.Activity;
import br.com.microsoft.ocp.bot.service.jmeter.plugin.schemas.Conversation;
import br.com.microsoft.ocp.bot.service.jmeter.plugin.schemas.Event;
import br.com.microsoft.ocp.bot.service.jmeter.plugin.schemas.Message;

public class ActivityParserFactory {
	private static final Logger log = LoggerFactory.getLogger(ActivityParserFactory.class);

	public static Activity parse(String type, String jsonPayload, String conversationId, String activityId) {
		Activity activity = parse(type, jsonPayload, conversationId);
		activity.setId(activityId);
		return activity;
	}

	
	public static Activity parse(String type, String jsonPayload, String conversationId) {
		Activity activity = parse(type, jsonPayload);
		activity.setConversation(new Conversation(conversationId));
		
		return activity;
	}

	public static Activity parse(String type, String jsonPayload) {
		//log.debug(jsonPayload);

		Jsonb jsonb = JsonbBuilder.create();

		if (type.equals("message")) {
			return jsonb.fromJson(jsonPayload, Message.class);
		}else if (type.equals("event")) {
			return jsonb.fromJson(jsonPayload, Event.class);
		}

		return jsonb.fromJson(jsonPayload, Activity.class);
	}

}