package com.mesosphere.sdk.debug;

import com.mesosphere.sdk.http.ResponseUtils;
import com.mesosphere.sdk.scheduler.SchedulerUtils;
import com.mesosphere.sdk.state.StateStore;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.fasterxml.jackson.datatype.jsonorg.JsonOrgModule;
import org.json.JSONObject;

import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;

import java.util.Map;
import java.util.Set;

/**
 * TaskReservationsTracker is the backend of TaskReservationsResource
 * It aggregates and reports reservations owned by this service.
 */
public class TaskReservationsTracker implements DebugEndpoint {

  private final StateStore stateStore;

  public TaskReservationsTracker(StateStore stateStore) {
    this.stateStore = stateStore;
  }

  public Response getJson(@QueryParam("plan") String filterPlan,
                          @QueryParam("phase") String filterPhase,
                          @QueryParam("step") String filterStep,
                          @QueryParam("sync") boolean requireSync)
  {
    Map<String, Set<String>> resourceIdsByAgentHost = SchedulerUtils.getResourceIdsByAgentHost(stateStore);

    ObjectMapper jsonMapper = new ObjectMapper();
    jsonMapper.registerModule(new Jdk8Module());
    jsonMapper.registerModule(new JsonOrgModule());

    JSONObject response = jsonMapper.convertValue(resourceIdsByAgentHost, JSONObject.class);

    return ResponseUtils.jsonOkResponse(response);
  }
}