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

import static tv.pluto.ip.dal.subclip.SubClips.CreateRequest;
import static tv.pluto.ip.dal.subclip.SubClips.CreateResponse;
import static tv.pluto.ip.dal.subclip.SubClips.GetByIdRequest;
import static tv.pluto.ip.dal.subclip.SubClips.GetByIdResponse;
import static tv.pluto.ip.dal.subclip.SubClips.GetByIdsRequest;
import static tv.pluto.ip.dal.subclip.SubClips.GetByIdsResponse;
import static tv.pluto.ip.dal.subclip.SubClips.SubClip;

import com.plutotv.test.lib.LogUtils;
import io.grpc.Channel;
import java.util.List;
import java.util.logging.Logger;
import tv.pluto.grpc.GenericGrpcClient;
import tv.pluto.ip.dal.subclip.SubClipManagerGrpc;

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

  private SubClipManagerGrpc.SubClipManagerBlockingStub blockingStub;

  public SubClipsClient(Channel channel) {
    // no Metadata
    blockingStub = SubClipManagerGrpc.newBlockingStub(channel);
  }

  public SubClipsClient(Channel channel, boolean auth) {
    blockingStub = SubClipManagerGrpc.newBlockingStub(channel);

    if (auth) blockingStub = blockingStub.withInterceptors(CLIENT_INTERCEPTOR_AUTH);
    else blockingStub = blockingStub.withInterceptors(CLIENT_INTERCEPTOR);
  }

  /**
   * Method represents gRPC method GetSubClipById from <b>subclips.proto</b> file
   *
   * @param subClipId id for search
   * @return GetSubClipByIdResponse object
   */
  public GetByIdResponse getSubClipById(String subClipId) {
    logger.info("Getting info for subclip with id: " + subClipId + " ...");
    GetByIdRequest request = GetByIdRequest.newBuilder().setId(subClipId).build();

    return blockingStub.getById(request);
  }

  /**
   * Method represents gRPC method GetSubClipsByIds from <b>subclips.proto</b> file
   *
   * @param subClipIdIds ids for search
   * @return GetSubClipsByIdsResponse object
   */
  public GetByIdsResponse getSubClipsByIds(List<String> subClipIdIds) {
    logger.info("Getting list of subclips for ids: " + subClipIdIds + " ...");

    GetByIdsRequest request = GetByIdsRequest.newBuilder().addAllIds(subClipIdIds).build();

    return blockingStub.getByIds(request);
  }

  public CreateResponse create(SubClip subClip) {
    LogUtils.logInfoMessage("Create subClip using object " + subClip);

    CreateRequest createRequest = CreateRequest.newBuilder().setDocument(subClip).build();

    return blockingStub.create(createRequest);
  }
}
