package eu.dnetlib.goldoa.service.utils;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.mail.MessagingException;
import java.io.PrintWriter;
import java.io.StringWriter;

/**
 * Created by antleb on 5/6/15.
 */
@Component
@Aspect
public class EmailUtilsLogger {
	@Autowired
	private MailLibrary mailLibrary;

	private
	@Value("#{cascadingPropertyLoader.properties['goldoa.debugemails']}")
	boolean sendEmails = false;

	@Around("execution(public void eu.dnetlib.goldoa.service.utils.EmailUtils.send* (..))")
	public Object logErrors(ProceedingJoinPoint joinPoint) throws Throwable {
		if (sendEmails) {
			try {
				mailLibrary.sendEmail("antleb@di.uoa.gr", "sending email: " + joinPoint.getSignature().getName(), "");

				return joinPoint.proceed();
			} catch (Throwable throwable) {
				StringWriter sw = new StringWriter();
				PrintWriter pw = new PrintWriter(sw);

				throwable.printStackTrace(pw);
				pw.close();

				try {
					mailLibrary.sendEmail("antleb@di.uoa.gr", "Exception in mails", sw.toString());
				} catch (MessagingException e) {
					e.printStackTrace();
				}

				throw throwable;
			}
		} else {
			return joinPoint.proceed();
		}
	}
}
