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;
    }

}
