
package eu.dnetlib.goldoa.service;

import eu.dnetlib.goldoa.domain.Organization;
import eu.dnetlib.goldoa.domain.OrganizationManagerException;
import eu.dnetlib.goldoa.service.dao.OrganizationDAO;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

//import eu.dnetlib.goldoa.service.dao.BudgetDAO;


/**
 * Created by antleb on 3/3/15.
 */
@Service("organizationManager")
@Transactional
public class OrganizationManagerImpl implements OrganizationManager {

	@Autowired
	private OrganizationDAO organizationDAO;

	/*@Autowired
	BudgetDAO budgetDAO;*/

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

	@Override
	public Organization getById(String organizationId) throws OrganizationManagerException {
		try {
			return organizationDAO.getOrganization(organizationId);
		} catch (EmptyResultDataAccessException e) {
			throw new OrganizationManagerException(OrganizationManagerException.ErrorCause.NOT_EXISTS);
		}
	}

	@Override
	public List<Organization> getAffiliatedWithUser(String userId) {
		return organizationDAO.getAffiliatedWithUser(userId);
	}

	@Override
	public String saveOrganization(final Organization organization) throws OrganizationManagerException {
		if (organization.getId() == null) {
			organization.setId("portal::" + DigestUtils.md5Hex(organization.getName()));
			organization.setSource("portal");
		}
		organizationDAO.saveOrganization(organization);
		/*
		organizationDAO.deleteOrganizationBudgets(organization);
		organizationDAO.insertOrganizationBudgets(organization);
        */
		return organization.getId();
	}

	@Override
	public Organization createOrganization(String name) {
		return organizationDAO.createOrganization(name);
	}
}

