package org.ei.drishti.action;
import org.ei.drishti.dto.BeneficiaryType;
import org.ei.drishti.scheduler.router.Action;
import org.ei.drishti.scheduler.router.MilestoneEvent;
import org.ei.drishti.service.ActionService;
import org.motechproject.scheduletracking.api.domain.WindowName;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import java.util.Map;
import static org.ei.drishti.dto.AlertStatus.normal;
import static org.ei.drishti.dto.AlertStatus.upcoming;
import static org.ei.drishti.dto.AlertStatus.urgent;
@Component
@Qualifier("AlertCreationAction")
public class AlertCreationAction implements Action {
ActionService actionService;
@Autowired
public AlertCreationAction(ActionService actionService) {
this.actionService = actionService;
}
@Override
public void invoke(MilestoneEvent event, Map<String, String> extraData) {
BeneficiaryType beneficiaryType = BeneficiaryType.from(extraData.get("beneficiaryType"));
if (WindowName.late.toString().equals(event.windowName())) {
actionService.alertForBeneficiary(beneficiaryType, event.externalId(), event.scheduleName(), event.milestoneName(), urgent, event.startOfLateWindow(), event.startOfMaxWindow());
} else if (WindowName.earliest.toString().equals(event.windowName())) {
actionService.alertForBeneficiary(beneficiaryType, event.externalId(), event.scheduleName(), event.milestoneName(), upcoming, event.startOfDueWindow(), event.startOfLateWindow());
} else {
actionService.alertForBeneficiary(beneficiaryType, event.externalId(), event.scheduleName(), event.milestoneName(), normal, event.startOfDueWindow(), event.startOfLateWindow());
}
}
}