package eu.dnetlib.goldoa.service.eligibility;

import eu.dnetlib.goldoa.domain.Eligibility;
import eu.dnetlib.goldoa.domain.Request;
import eu.dnetlib.goldoa.service.EligibilityManager;

import java.util.List;

/**
 * Created by antleb on 3/9/15.
 */
public class ChainEligibilityManager implements EligibilityManager {

	private List<EligibilityManager> managers;


	@Override
	public Eligibility validate(Request request) {
		try {

			Eligibility eligibility = new Eligibility(Eligibility.Status.OK);

			Request.RequestStatus status = Request.RequestStatus.forStatus(request.getStatus());

			switch (status) {
				case CONDITIONALLY_APPROVED:
				case APPROVED:
				case ACCOUNTING_PROCESSING:
				case ACCOUNTING_ON_HOLD:
				case ACCOUNTING_DENIED:
				case ACCOUNTING_PAID:
					return eligibility;
				default:
					for (EligibilityManager manager : managers)
						eligibility.merge(manager.validate(request));

					return eligibility;
			}
		} catch (Exception e) {
			e.printStackTrace();

			return new Eligibility(Eligibility.Status.IFFY, "There was an error checking the eligibility of the request.");
		}
	}

	public List<EligibilityManager> getManagers() {
		return managers;
	}

	public void setManagers(List<EligibilityManager> managers) {
		this.managers = managers;
	}
}