package eu.dnetlib.clients.data.espas;

import eu.dnetlib.api.data.espas.DataProviderService;
import eu.dnetlib.api.data.espas.DataProviderServiceException;
import eu.dnetlib.clients.ws.BaseWebServiceClient;
import eu.dnetlib.domain.data.espas.HarvestHistory;
import eu.dnetlib.domain.data.espas.HarvestSchedule;
import eu.dnetlib.domain.functionality.Collection;

import java.util.Collections;
import java.util.Date;
import java.util.List;

/**
 * Created by antleb on 6/23/14.
 */
public class DataProviderWebServiceClient extends BaseWebServiceClient<DataProviderWebService> implements DataProviderService {

	@Override
	public void harvest(List<String> types, Date dateFrom, Date dateTo, String dataProviderId) throws DataProviderServiceException {
		try {
			this.webService.harvest(types, dateFrom, dateTo, dataProviderId);
		} catch (DataProviderWebServiceException e) {
			throw new DataProviderServiceException(e);
		}
	}

	@Override
	public String scheduleHarvest(List<String> types, Date initialModificationDate, String dataProviderId, String cronExpression) throws DataProviderServiceException {
		try {
			return webService.scheduleHarvest(types, initialModificationDate, dataProviderId, cronExpression);
		} catch (DataProviderWebServiceException e) {
			throw new DataProviderServiceException(e);
		}
	}

	@Override
	public void updateHarvestSchedule(String scheduleId, List<String> types, String dataProviderId, String cronExpression) throws DataProviderServiceException {
		try {
			webService.updateHarvestSchedule(scheduleId, types, dataProviderId, cronExpression);
		} catch (DataProviderWebServiceException e) {
			throw new DataProviderServiceException(e);
		}
	}

	@Override
	public void cancelHarvestSchedule(String scheduleId) throws DataProviderServiceException {
		try {
			webService.cancelHarvestSchedule(scheduleId);
		} catch (DataProviderWebServiceException e) {
			throw new DataProviderServiceException(e);
		}
	}

	@Override
	public void pauseHarvestSchedule(String scheduleId) throws DataProviderServiceException {
		try {
			webService.pauseHarvestSchedule(scheduleId);
		} catch (DataProviderWebServiceException e) {
			throw new DataProviderServiceException(e);
		}
	}

	@Override
	public void resumeHarvestScedule(String scheduleId) throws DataProviderServiceException {
		try {
			webService.resumeHarvestSchedule(scheduleId);
		} catch (DataProviderWebServiceException e) {
			throw new DataProviderServiceException(e);
		}
	}

	@Override
	public List<HarvestSchedule> getHarvestSchedules(String dataProviderId) throws DataProviderServiceException {
		try {
			List<HarvestSchedule> res = webService.getHarvestSchedules(dataProviderId);

			if (res == null)
				res = Collections.EMPTY_LIST;

			return res;
		} catch (DataProviderWebServiceException e) {
			throw new DataProviderServiceException(e);
		}
	}

	@Override
	public List<HarvestHistory> getHarvestHistory(String dataProviderId) throws DataProviderServiceException {
		try {
			List<HarvestHistory> res = webService.getHarvestHistory(dataProviderId);

			if (res == null)
				res = Collections.EMPTY_LIST;

			for (HarvestHistory history:res) {
				if (history.getErrors() == null)
					history.setErrors(Collections.EMPTY_LIST);
			}

			return res;
		} catch (DataProviderWebServiceException e) {
			throw new DataProviderServiceException(e);
		}
	}

	@Override
	public void deleteHarvestHistory(String dataProviderId, Date from, Date to) throws DataProviderServiceException {
		try {
			webService.deleteHarvestHistory(dataProviderId, from, to);
		} catch (DataProviderWebServiceException e) {
			throw new DataProviderServiceException(e);
		}
	}

	@Override
	public void deleteHarvestHistory(List<String> harvestIds) throws DataProviderServiceException {
		try {
			webService.deleteHarvestHistory(harvestIds);
		} catch (DataProviderWebServiceException e) {
			throw new DataProviderServiceException(e);
		}
	}
}
