import com.recombee.api_client.RecombeeClient;
import com.recombee.api_client.api_requests.*;
import com.recombee.api_client.bindings.RecommendationResponse;
import com.recombee.api_client.bindings.Recommendation;
import com.recombee.api_client.exceptions.ApiException;

import java.io.FileReader;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

public class Main {

    public static void main(String[] args) throws ApiException {

        RecombeeClient client = new RecombeeClient("events-example", "PbBaEVxx8ZOj0x3BhGtqfHyi8qQ8rm8rE1JBnSPoCnHwetzO3gjHer96YVAIa14G");

        ArrayList<Request> interactions = new ArrayList<>();

        JSONParser parser = new JSONParser();
        try {
            JSONArray a = (JSONArray) parser.parse(new FileReader("detail_views.json"));
            for (Object o : a) {
                JSONObject interaction = (JSONObject) o;
                Date time =  new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX").parse((String)interaction.get("timestamp"));
                Request r = new AddDetailView((String) interaction.get("userId"),
                                              (String) interaction.get("itemId"))
                                .setTimestamp(time).setCascadeCreate(true);

                interactions.add(r);
            }
        } catch (org.json.simple.parser.ParseException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }

        client.send(new Batch(interactions));

        System.out.println("Recommendations for \"user-27\":");
        RecommendationResponse recommended = client.send(new RecommendItemsToUser("user-27", 5));
        for(Recommendation rec: recommended) System.out.println(rec.getId());

        System.out.println("Items related to \"event-32\" for \"user-27\":");
        recommended = client.send(new RecommendItemsToItem("event-32", "user-27", 5));
        for(Recommendation rec: recommended) System.out.println(rec.getId());

        System.out.println("Users who should be interested in \"event-42\":");
        recommended = client.send(new RecommendUsersToItem("event-42",  5));
        for(Recommendation rec: recommended) System.out.println(rec.getId());
    }
}