package eu.dnetlib.data.claims.migration;
import java.util.ArrayList;
import java.util.List;

import com.google.gson.*;
import eu.dnetlib.data.claims.migration.entity.Claim;
import eu.dnetlib.data.claims.migration.entity.Result;
import org.springframework.web.client.RestTemplate;

import javax.lang.model.type.ArrayType;

public class JsonldBuilder {
	
	public static String toJsonld(ClaimGenerics<Object, Result> claim) {
		Gson gson = new GsonBuilder().setPrettyPrinting().create();
		
		String retString = gson.toJson(claim);
		
	/*	final String uri = "http://localhost:9090/oa/buildAndInsertClaim";
		 
	 
	    RestTemplate restTemplate = new RestTemplate();
	    String result = restTemplate.postForObject( uri, retString, String.class);
	 
	    System.out.println(result);
	*/	
		return retString;
//		JsonParser parser = new JsonParser();
//		JsonObject obj = parser.parse(retString).getAsJsonObject();
//		obj.addProperty("@context", "https://dl.dropboxusercontent.com/u/19168406/oa-openaire.jsonld");
//		obj.addProperty("@type", "oa:Annotation");
//		return  gson.toJson(obj).toString();
	}
    public static String toJsonld(Claim claim) {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String retString = gson.toJson(claim);
        return retString;
    }
    public static String toJsonld(List<Claim> claims) {

        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.setPrettyPrinting();
        gsonBuilder.setDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        Gson gson =gsonBuilder.create();

         String retString = gson.toJson(claims);
        return retString;
    }

	public static void bulkLoad(List<String> claims) {
		
		final String uri = "http://localhost:9090/oa/insertClaim";
		RestTemplate restTemplate = new RestTemplate();
		 
		int counter = 0;
		
		List<String> claimsBatch = new ArrayList<String>();
		for (String claim : claims) {
			counter ++;
			claimsBatch.add(claim);
			if (counter % 50 == 0) {
				String result = restTemplate.postForObject( uri, "{\"@graph\" : "+claimsBatch.toString()+"}", String.class);
				claimsBatch.clear();
				System.out.println(result);
			}
		}
		
		if (!claimsBatch.isEmpty()) {
			String result = restTemplate.postForObject( uri, "{\"@graph\" : "+claimsBatch.toString()+"}", String.class);
			claimsBatch.clear();
			System.out.println(result);
		}
	 
		
//		JsonParser parser = new JsonParser();
//		JsonObject obj = parser.parse(retString).getAsJsonObject();
//		obj.addProperty("@context", "https://dl.dropboxusercontent.com/u/19168406/oa-openaire.jsonld");
//		obj.addProperty("@type", "oa:Annotation");
//		return  gson.toJson(obj).toString();
	}

}
