package eu.dnetlib.goldoa.service;

import eu.dnetlib.goldoa.domain.Currency;
import eu.dnetlib.goldoa.domain.Publisher;
import eu.dnetlib.goldoa.domain.Vocabulary;
import eu.dnetlib.goldoa.service.dao.PersonDAO;
import eu.dnetlib.goldoa.service.dao.PublisherDAO;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * Created by antleb on 3/11/15.
 */
@Transactional
public class PublisherManagerImpl implements PublisherManager, Searchable {

	@Autowired
	private PublisherDAO publisherDAO;
	@Autowired
	private PersonDAO personDAO;

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

	@Override
	public Publisher getPublisher(String publisherId) {
		Publisher publisher = publisherDAO.getPublisher(publisherId);

		if (publisher.getContact() != null)
			publisher.setContact(personDAO.getPersonById(publisher.getContact().getId()));

		return publisher;
	}

	@Override
	public Publisher savePublisher(Publisher publisher) {

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

		}

		if (publisher.getCurrency() == null)
			publisher.setCurrency(Currency.EUR);

		return publisherDAO.savePublisher(publisher);
	}

	public PublisherDAO getPublisherDAO() {
		return publisherDAO;
	}

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

}
