package eu.dnetlib.goldoa.service.utils;

import eu.dnetlib.goldoa.domain.BudgetInfo;
import eu.dnetlib.goldoa.domain.Person;
import eu.dnetlib.goldoa.domain.RequestInfo;
import eu.dnetlib.goldoa.domain.Role;

import javax.mail.MessagingException;
import java.util.List;

/**
 * Created by antleb on 5/6/15.
 */
public interface EmailUtils {
	void sendActivationEmail(Person user, String token) throws MessagingException;

	void sendResetPasswordEmail(Person user, String password) throws MessagingException;

	void sendRequesterOKEmail(RequestInfo requestInfo) throws MessagingException;

	void sendModeratorOKEmail(RequestInfo requestInfo, Person moderator) throws MessagingException;

	void sendRequesterIFFYEmail(RequestInfo requestInfo) throws MessagingException;

	void sendModeratorIFFYEmail(RequestInfo requestInfo, Person moderator) throws MessagingException;

	void sendRequesterInitiallyApprovedEmail(RequestInfo requestInfo) throws MessagingException;

	void sendRequesterApprovedEmail(RequestInfo requestInfo) throws MessagingException;

	void sendRequesterRejectedEmail(RequestInfo requestInfo) throws MessagingException;

	void sendModeratorNewBudgetEmail(Person moderator, BudgetInfo budgetInfo) throws MessagingException;

	void sendUserNewBudgetEmail(BudgetInfo budgetInfo) throws MessagingException;

	void sendUserAcceptedBudgetEmail(BudgetInfo budgetInfo) throws MessagingException;

	void sendModeratorAcceptedBudgetEmail(Person moderator, BudgetInfo budgetInfo) throws MessagingException;

	void sendUserRejectedBudgetEmail(BudgetInfo budgetInfo) throws MessagingException;

	void sendModeratorRejectedBudgetEmail(Person moderator, BudgetInfo budgetInfo) throws MessagingException;

	void sendUserRoleAcceptedEmail(Person person, Role role) throws MessagingException;

	void sendModeratorRoleAcceptedEmail(Person moderator, Person user, Role role) throws MessagingException;

	void sendUserRoleRejectedEmail(Person person, Role role) throws MessagingException;

	void sendModeratorRoleRejectedEmail(Person moderator, Person user, Role role) throws MessagingException;

	void sendUserRoleRequestedEmail(Person person, List<Role> roles) throws MessagingException;

	void sendModeratorRoleRequestedEmail(Person moderator, Person user, List<Role> roles) throws MessagingException;

	void sendRequesterInvoiceNotification(RequestInfo requestInfo) throws MessagingException;

	void sendPublisherInvoiceNotification(RequestInfo requestInfo) throws MessagingException;

	void sendAccountingRequestApprovedEmail(Person person, RequestInfo requestInfo) throws MessagingException;

	void sendRequesterPaidEmail(RequestInfo requestInfo) throws MessagingException;

	void sendEvaPaidEmail(String evaEmail, RequestInfo requestInfo) throws MessagingException;

	void sendPublisherPaidEmail(RequestInfo requestInfo) throws MessagingException;

	void sendModeratorPaidEmail(Person moderator, RequestInfo requestInfo) throws MessagingException;

	void sendRequesterOnHoldEmail(RequestInfo requestInfo) throws MessagingException;

	void sendPublisherOnHoldEmail(RequestInfo requestInfo) throws MessagingException;

	void sendModeratorOnHoldEmail(Person moderator, RequestInfo requestInfo) throws MessagingException;

	void sendRequesterDeniedEmail(RequestInfo requestInfo) throws MessagingException;

	void sendPublisherDeniedEmail(RequestInfo requestInfo) throws MessagingException;

	void sendModeratorDeniedEmail(Person moderator, RequestInfo requestInfo) throws MessagingException;

	void sendCoordinatorRequestSubmittedEmail(Person coordinator, RequestInfo requestInfo) throws MessagingException;

	void sendModeratorProcessingEmail(Person person, RequestInfo requestInfo) throws MessagingException;

	void sendModeratorInvoiceUploaded(Person person, RequestInfo requestInfo) throws MessagingException;
}
