package eu.dnetlib.goldoa.service;

import eu.dnetlib.goldoa.domain.Project;
import eu.dnetlib.goldoa.domain.Request;
import eu.dnetlib.goldoa.service.dao.ProjectDAO;
import eu.dnetlib.goldoa.service.dao.RequestDAO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/*
Created by antleb on 3/3/15.
*/

@Transactional
@Service("projectManager")
public class ProjectManagerImpl implements ProjectManager {

    @Autowired
    private ProjectDAO projectDAO;
	@Autowired
	private RequestDAO requestDAO;

	@Value("${goldoa.eligibility.project.request.count}")
	private int maxRequests;

	@Override
	public List<Object> search(String term) {
		return projectDAO.search(term);
	}

	@Override
	public Project getById(String projectId) {

		Project project = projectDAO.getProject(projectId);

		List<Request> requests = requestDAO.getForProject(project.getId());
		int approved = 0;

		for (Request request : requests)
			switch (request.getStatus()) {
				case CONDITIONALLY_APPROVED:
				case APPROVED:
				case ACCOUNTING_PROCESSING:
				case ACCOUNTING_ON_HOLD:
				case ACCOUNTING_PAID:
					approved++;
					break;
			}

		project.setRemainingPublications(maxRequests - approved);
		return project;
	}

	@Override
	public List<Project> getEligibleProjectsForOrganization(String organizationId) {
		List<Project> projects = projectDAO.getEligibleProjectsForOrganization(organizationId);

		return projects;
	}

	@Override
	public List<Project> getFutureEligibleProjectsForOrganization(String organizationId) {
		List<Project> projects = projectDAO.getFutureEligibleProjectsForOrganization(organizationId);
		return projects;
	}


	public int getMaxRequests() {
		return maxRequests;
	}

	public void setMaxRequests(int maxRequests) {
		this.maxRequests = maxRequests;
	}
}

