package eu.dnetlib.functionality.recommendation.app;

import java.net.MalformedURLException;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.mail.MessagingException;


import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

import eu.dnetlib.api.functionality.RecommendationServiceException;
import eu.dnetlib.clients.functionality.recommendation.ws.RecommendationWebService;
import eu.dnetlib.clients.functionality.recommendation.ws.RecommendationWebServiceClient;
import eu.dnetlib.domain.functionality.Recommendation;

public class TestService {

	// private static RecommendationService service = new
	// RecommendationWebServiceClient();

	@SuppressWarnings("deprecation")
	public static void main(String[] args) throws MalformedURLException,
			RecommendationServiceException, MessagingException {

		try {
			RecommendationWebServiceClient service = new RecommendationWebServiceClient();

			JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();

			factory.setServiceClass(RecommendationWebService.class);
			factory
					.setAddress("http://localhost:8080/uoa-recommendation-latest/services/RecommendationWebService");

			RecommendationWebService webService = (RecommendationWebService) factory
					.create();

			((RecommendationWebServiceClient) service)
					.setWebService(webService);

			Recommendation rec = null;
			String id1 = null;
			String id2 = null;
			String id3 = null;
			String id4 = null;
			Date d = new Date();
			d.setMonth(12);
			Set<String> communityIds = new HashSet<String>();
			Set<String> Ids = new HashSet<String>();
			communityIds.add("CIA");
			String userId = "Elena";

			d.setMonth(3);
			try {
				// id1 = service.generateAnnouncement("Foo", new Date(), new
				// Date());

				service.getAllUserRecommendations("uknown");
				service.getCommunityRecommendationsForUser("uknown");

				id2 = service.generateUserRecommendation( 0, true, "bla", "bla", "Bla",
						new Date(), d);
				System.out.println(id2);

				service.addRecommendationToUser(id2, userId);
				id3 = service.generateCommunityRecommendation( 0, true, "bla", "bla", new Date(), d, communityIds);

				Ids.add("FBI");
				id4 = service.generateCommunityRecommendation(0, true, "New Community",
						userId, new Date(), new Date(), Ids);

			} catch (RecommendationServiceException e) {
				e.printStackTrace();
			}

			List<Recommendation> rList = service.getAllAnnouncements();
			for (Recommendation t : rList)
				System.out.println(t.getContent());
			System.out.println("1---------");
			rList.clear();

			// RecommendationSearchCriteria criteria = new
			// RecommendationSearchCriteria();
			List<String> list = service.getAllCommunityRecommendations();
			for (String t : list)
				System.out.println(t);
			System.out.println("2---------");
			list.clear();

			list = service.getCommunityRecommendations("CIA");
			for (String t : list)
				System.out.println(t);
			list.clear();
			System.out.println("3---------");

			list = service.getAllCommunityRecommendations("CIA");
			for (String t : list)
				System.out.println(t);
			list.clear();
			System.out.println("4---------");

			list = service.getAllCommunityRecommendations("FBI");
			for (String t : list)
				System.out.println(t);
			list.clear();
			System.out.println("5---------");

			list = service.getAllUserRecommendations("James");
			for (String t : list)
				System.out.println(t);
			System.out.println("6---------");
			list.clear();

			list = service.getAllUserRecommendations("Elena");
			for (String t : list)
				System.out.println(t);
			System.out.println("7---------");
			list.clear();

			service.updateAnnouncement(id1, 0, true, "BOO", "temp", new Date(),
					d);
			rec = service.getRecommendation(id1);
			System.out.println("Announcement: " + rec.getContent());

			// service.sendAnnouncement(id1);

			service.removeAnnouncement(id1);
			service.removeUserRecommendation(id2);
			service.removeCommunityRecommendation(id3);
			service.removeCommunityRecommendation(id4);
			rList = service.getAllAnnouncements();
			for (String t : list)
				System.out.println(t);
			System.out.println("---------");
			list.clear();

			list = service.getAllCommunityRecommendations();
			for (String t : list)
				System.out.println(t);
			System.out.println("---------");
			list.clear();

			list = service.getAllUserRecommendations(userId);
			for (String t : list)
				System.out.println(t);
			list.clear();
		} catch (Throwable t1) {
			t1.printStackTrace();
			return;
		}
	}
}
