package gov.nysenate.openleg.service.spotcheck.agenda;
import gov.nysenate.openleg.model.base.Version;
import gov.nysenate.openleg.service.spotcheck.base.CheckMailService;
import gov.nysenate.openleg.service.spotcheck.base.SimpleCheckMailService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.mail.Message;
import javax.mail.MessagingException;
import java.io.File;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Service
public class CommAgendaAlertCheckMailService extends SimpleCheckMailService implements CheckMailService {
protected static final Pattern commAgendaSubjectPattern =
Pattern.compile("^Senate\\s+-\\s+([A-z,\\s]+)\\s+-\\s+Committee\\s+Agenda\\s+" +
"(?:-\\s+Addendum\\s+([A-z])\\s+-\\s+)?for\\s+week\\s+of\\s+" +
"(\\d{2}/\\d{2}/\\d{4})\\s+-\\s+Posted\\s+(\\d{2}/\\d{2}/\\d{4}\\s+\\d{2}:\\d{2}\\s+(?:AM|PM))\\s*$");
@Override
public int checkMail() {
return checkMail(commAgendaSubjectPattern);
}
@Override
protected File getSaveFile(Message message) throws MessagingException {
Matcher subjectMatcher = commAgendaSubjectPattern.matcher(message.getSubject());
if (subjectMatcher.matches()) {
String addendum = subjectMatcher.group(2);
if (StringUtils.isBlank(addendum)) {
addendum = "original";
}
LocalDate weekOf = LocalDate.parse(subjectMatcher.group(3), DateTimeFormatter.ofPattern("MM/dd/yyyy"));
LocalDateTime posted = LocalDateTime.parse(subjectMatcher.group(4).replace("\\s+", " "),
DateTimeFormatter.ofPattern("MM/dd/yyyy hh:mm a"));
String filename = String.format("agenda_alert-%s-%s-%s-%s.html",
weekOf.format(DateTimeFormatter.BASIC_ISO_DATE),
subjectMatcher.group(1).replace(' ', '_').replace(',', '.'), addendum,
getSentDateString(message));
return new File(new File(environment.getStagingDir(), "alerts"), filename);
}
throw new IllegalArgumentException();
}
@Override
protected String getCheckMailType() {
return "committee agenda";
}
}