package eu.dnetlib.client.notification;

import javax.inject.Singleton;

import eu.dnetlib.efg1914.authoring.components.Configuration;
import eu.dnetlib.efg1914.authoring.components.Frame;
import eu.dnetlib.efg1914.authoring.components.Item;
import eu.dnetlib.efg1914.authoring.components.Theme;
import eu.dnetlib.efg1914.authoring.components.Topic;
import eu.dnetlib.efg1914.authoring.users.User;

@Singleton
public interface NotificationSender {

	/**
	 * Sends a new item to the Notification Service
	 * 
	 * @param item
	 */
	public void sendNewItem(Item item);

	/**
	 * Sends an updated item to the Notification Service
	 * 
	 * @param item
	 */
	public void sendUpdatedItem(Item item);

	/**
	 * Sends a deleted item to the Notification Service
	 * 
	 * @param item
	 */
	public void sendDeletedItem(Item item);

	/**
	 * Sends a new frame to the Notification Service
	 * 
	 * @param frame
	 */
	public void sendNewFrame(Frame frame);

	/**
	 * Sends an updated frame to the Notification Service
	 * 
	 * @param updatedFrame
	 */
	public void sendUpdatedFrame(Frame updatedFrame);

	/**
	 * Sends an deleted frame to the Notification Service
	 * 
	 * @param frame
	 */
	public void sendDeletedFrame(Frame frame);

	/**
	 * Sends an updated topic to the Notification Service
	 * 
	 * @param updatedTopic
	 */
	public void sendUpdatedTopic(Topic updatedTopic);

	/**
	 * Sends a new topic to the Notification Service
	 * 
	 * @param topic
	 */
	public void sendNewTopic(Topic topic);

	/**
	 * Sends a deleted topic to the Notification Service
	 * 
	 * @param topic
	 */
	public void sendDeletedTopic(Topic topic);

	/**
	 * Sends an updated theme to the notification service
	 * 
	 * @param updatedTheme
	 */
	public void sendUpdatedTheme(Theme updatedTheme);

	/**
	 * Sends an new theme to the notification service
	 * 
	 * @param theme
	 */
	public void sendNewTheme(Theme theme);

	/**
	 * Sends an deleted theme to the notification service
	 * 
	 * @param theme
	 */
	public void sendDeletedTheme(Theme theme);

	public void sendNewUser(User userToCreate);

	public void sendUpdatedUser(User userToUpdate);

	public void sendDeletedUser(String userIdToDelete);

	public void sendupdatedConfiguration(Configuration configuration);

}