/*
 * (c) 2020 Pluto Inc.
 */
package tv.pluto.grpc.sequencer;

import static tv.pluto.ip.dal.sequencer.Sequencer.GetHydratedEpisodeRequest;
import static tv.pluto.ip.dal.sequencer.Sequencer.GetHydratedEpisodeResponse;
import static tv.pluto.ip.dal.sequencer.Sequencer.GetHydratedTimelineRequest;
import static tv.pluto.ip.dal.sequencer.Sequencer.GetHydratedTimelineResponse;

import io.grpc.Channel;
import java.util.logging.Logger;
import tv.pluto.grpc.GenericGrpcClient;
import tv.pluto.ip.dal.sequencer.SequencerManagerGrpc;

/** Class represents gRPC client for <b>sequencer.proto</b> file */
public class SequencerClient extends GenericGrpcClient {
  private static final Logger logger = Logger.getLogger(SequencerClient.class.getName());

  private SequencerManagerGrpc.SequencerManagerBlockingStub blockingStub;

  public SequencerClient(Channel channel) {
    blockingStub = SequencerManagerGrpc.newBlockingStub(channel);
    blockingStub = blockingStub.withInterceptors(CLIENT_INTERCEPTOR);
  }

  /**
   * Method represents gRPC method GetHydratedEpisode from <b>sequencer.proto</b> file
   *
   * @param id to search
   * @return GetHydratedEpisodeResponse object
   */
  public GetHydratedEpisodeResponse getHydratedEpisode(String id) {
    logger.info("Getting hydrated episode with id: " + id + " ...");
    GetHydratedEpisodeRequest request = GetHydratedEpisodeRequest.newBuilder().setId(id).build();

    return blockingStub.getHydratedEpisode(request);
  }

  /**
   * Method represents gRPC method GetHydratedTimeline from <b>sequencer.proto</b> file
   *
   * @param id to search
   * @return GetHydratedTimelineResponse object
   */
  public GetHydratedTimelineResponse getHydratedTimeline(String id) {
    logger.info("Getting hydrated timeline with id: " + id + " ...");
    GetHydratedTimelineRequest request = GetHydratedTimelineRequest.newBuilder().setId(id).build();

    return blockingStub.getHydratedTimeline(request);
  }
}
