
package eu.dnetlib.goldoa.service;

import eu.dnetlib.goldoa.domain.Currency;
import eu.dnetlib.goldoa.domain.Publisher;
import eu.dnetlib.goldoa.service.dao.PublisherDAO;
import eu.dnetlib.goldoa.service.dao.UserDAO;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigInteger;
import java.util.List;


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

@Transactional
@Service("publisherManager")
public class PublisherManagerImpl implements PublisherManager, Searchable {

	@Autowired
	private PublisherDAO publisherDAO;
	@Autowired
	private UserDAO userDAO;
	private Log logger = LogFactory.getLog(PublicationManagerImpl.class);
	@Override
	public List<Object> search(String term) {
		return publisherDAO.search(term);
	}

	@Override
	public Publisher getPublisher(String publisherId) {
		Publisher publisher = publisherDAO.getPublisher(publisherId);
		if(publisher == null)
			return null;
		return publisher;
	}

	@Override
	public Publisher savePublisher(Publisher publisher) {

		if (publisher.getId() == null) {
			publisher.setId("portal::" + DigestUtils.md5Hex(publisher.getName()));
			publisher.setSource("portal");
		}

		if (publisher.getApcCurrency() == null)
			publisher.setApcCurrency((Currency.EUR));

		return publisherDAO.savePublisher(publisher);
	}

	public PublisherDAO getPublisherDAO() {
		return publisherDAO;
	}

	public void setPublisherDAO(PublisherDAO publisherDAO) {
		this.publisherDAO = publisherDAO;
	}

	public BigInteger getBankAddress() {
		return publisherDAO.getBankAddress();
	}

	@Override
	public Publisher getPublisherByName(String name) {
		return publisherDAO.getPublisherByName(name);
	}

	@Override
	public Publisher generateId(Publisher publisher){
		publisher.setId("portal::" + DigestUtils.md5Hex(publisher.getName()));
		publisher.setSource("portal");
		return publisher;
	}

	@Override
	public BigInteger getBankId() {
		return publisherDAO.getBankId();
	}

}

