package eu.dnetlib.goldoa.service.eligibility;

import eu.dnetlib.goldoa.domain.Budget;
import eu.dnetlib.goldoa.domain.Eligibility;
import eu.dnetlib.goldoa.domain.Organization;
import eu.dnetlib.goldoa.domain.OrganizationManagerException;
import eu.dnetlib.goldoa.domain.Request;
import eu.dnetlib.goldoa.service.EligibilityManager;
import eu.dnetlib.goldoa.service.OrganizationManager;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * Created by antleb on 4/4/15.
 */
public class OrganizationEligibilityManager implements EligibilityManager {
	@Autowired
	private OrganizationManager organizationManager;
	private String budgetAvailableNONOMessage;

	@Override
	public Eligibility validate(Request request) {
		Eligibility eligibility = new Eligibility(Eligibility.Status.OK);

		if (request.getOrganization() != null) {
			try {
				Organization organization = organizationManager.getById(request.getOrganization());
				boolean hasBudget = false;

				for (Budget budget : organization.getBudgets()) {
					if (budget.getRemaining() > 0 && ((budget.getStatusCode() & Budget.Status.APPROVED.getCode()) == Budget.Status.APPROVED.getCode())) {
						hasBudget = true;
					}
				}

				if (hasBudget) {
					eligibility = eligibility.merge(new Eligibility(Eligibility.Status.NONO, budgetAvailableNONOMessage));
				}

			} catch (OrganizationManagerException e) {
				e.printStackTrace();
			}
		}

		return eligibility;
	}

	public String getBudgetAvailableNONOMessage() {
		return budgetAvailableNONOMessage;
	}

	public void setBudgetAvailableNONOMessage(String budgetAvailableNONOMessage) {
		this.budgetAvailableNONOMessage = budgetAvailableNONOMessage;
	}
}
