package ch.bfh.swos.bookapp.vertx.listener;

import ch.bfh.swos.bookapp.cqrs.book.domain.event.BookAddedEvent;
import ch.bfh.swos.bookapp.cqrs.book.domain.event.BookRemovedEvent;
import ch.bfh.swos.bookapp.cqrs.book.domain.event.BookTitleChangedEvent;
import ch.bfh.swos.bookapp.vertx.VertXBean;
import org.axonframework.eventhandling.annotation.EventHandler;
import org.springframework.stereotype.Component;
import org.vertx.java.core.json.JsonObject;

import javax.inject.Inject;

/**
 * Created with IntelliJ IDEA.
 * User: rovi
 * Date: 12.08.13
 * Time: 14:18
 * To change this template use File | Settings | File Templates.
 */
@Component
public class BookEventListener {

    public static final String EVENT_BOOK_ADDED = "event.book.added";
    public static final String EVENT_BOOK_REMOVED = "event.book.removed";
    public static final String EVENT_BOOK_TITLE_CHANGED = "event.book.title.changed";

    public static final String CLIENT_ADDRESS = "client";

    @Inject
    private VertXBean vertxBean;

    @EventHandler
    public void on(BookAddedEvent event) {
        System.out.println("VertX listener reveived book added event for: " + event.getTitle() + " (" + event.getBookId() + ")");
        JsonObject paylod = new JsonObject();
        paylod.putString("eventId", EVENT_BOOK_ADDED);
        paylod.putString("bookId", event.getBookId());
        paylod.putString("bookTitle", event.getTitle());
        paylod.putNumber("releaseDate", event.getReleaseDate().getTime());
        paylod.putString("authorId", event.getAuthorId());
        vertxBean.getEventBus().publish(CLIENT_ADDRESS, paylod);
    }

    @EventHandler
    public void on(BookRemovedEvent event) {
        System.out.println("VertX listener reveived book removed event for: " + event.getBookId());
        JsonObject paylod = new JsonObject();
        paylod.putString("eventId", EVENT_BOOK_REMOVED);
        paylod.putString("bookId", event.getBookId());
        vertxBean.getEventBus().publish(CLIENT_ADDRESS,paylod);
    }

    @EventHandler
    public void on(BookTitleChangedEvent event) {
        System.out.println("VertX listener reveived book title cahnged event for: " + event.getBookId());
        JsonObject paylod = new JsonObject();
        paylod.putString("eventId", EVENT_BOOK_TITLE_CHANGED);
        paylod.putString("bookId", event.getBookId());
        paylod.putString("newBookTitle", event.getNewTitle());
        vertxBean.getEventBus().publish(CLIENT_ADDRESS,paylod);
    }
}