/*
 * (c) 2023 Pluto Inc.
 */
package tv.pluto.grpc.timelinedrafts;

import io.grpc.Channel;
import java.util.List;
import java.util.logging.Logger;
import tv.pluto.grpc.GenericGrpcClient;
import tv.pluto.ip.dal.timelinedrafts.TimelineDrafts;
import tv.pluto.ip.dal.timelinedrafts.TimelineDraftsManagerGrpc;

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

  private TimelineDraftsManagerGrpc.TimelineDraftsManagerBlockingStub blockingStub;

  public TimelineDraftsClient(Channel channel, boolean auth) {
    if (auth) {
      blockingStub = TimelineDraftsManagerGrpc.newBlockingStub(channel);
      blockingStub = blockingStub.withInterceptors(CLIENT_INTERCEPTOR_AUTH);
    } else {
      blockingStub = TimelineDraftsManagerGrpc.newBlockingStub(channel);
      blockingStub = blockingStub.withInterceptors(CLIENT_INTERCEPTOR);
    }
  }

  public void updateTimelinesBulk(
      List<String> listIds, TimelineDrafts.TimelineDraft timelineDraft) {
    TimelineDrafts.UpdateTimelineDraftsBulkRequest.Builder builder =
        TimelineDrafts.UpdateTimelineDraftsBulkRequest.newBuilder();

    if (listIds != null) builder.addAllDeleteIds(listIds);

    if (timelineDraft != null) builder.addCreateObjects(timelineDraft);

    TimelineDrafts.UpdateTimelineDraftsBulkRequest request = builder.build();
    blockingStub.updateTimelineDraftsBulk(request);
  }

  public TimelineDrafts.GetPopulatedTimelineDraftsByChannelIdResponse
      getPopulatedTimelineDraftsByChannelId(String id, long start, long stop) {
    TimelineDrafts.GetPopulatedTimelineDraftsByChannelIdRequest.Builder builder =
        TimelineDrafts.GetPopulatedTimelineDraftsByChannelIdRequest.newBuilder();

    if (!id.isEmpty()) {
      builder.setChannelId(id);
    }

    if (start != 0) {
      builder.setStart(start);
    }

    if (stop != 0) {
      builder.setStop(stop);
    }

    return blockingStub.getPopulatedTimelineDraftsByChannelId(builder.build());
  }

  public TimelineDrafts.DeleteTimelinesDraftInChannelByDatesResponse
      deleteTimelinesDraftInChannelByDatesRequest(String channel, String start, String stop) {
    TimelineDrafts.DeleteTimelinesDraftInChannelByDatesRequest request =
        TimelineDrafts.DeleteTimelinesDraftInChannelByDatesRequest.newBuilder()
            .setChannelId(channel)
            .setStart(start)
            .setEnd(stop)
            .build();

    return blockingStub.deleteTimelinesDraftInChannelByDates(request);
  }

  public TimelineDrafts.GetLatestManuallyCreatedTimelineDraftResponse
      getLatestManuallyCreatedTimelineDraft(String channel, String start, String stop) {
    TimelineDrafts.GetLatestManuallyCreatedTimelineDraftRequest.Builder builder =
        TimelineDrafts.GetLatestManuallyCreatedTimelineDraftRequest.newBuilder()
            .setChannelId(channel)
            .setStart(start);

    if (!stop.isEmpty()) builder.setEnd(stop);

    return blockingStub.getLatestManuallyCreatedTimelineDraft(builder.build());
  }

  public TimelineDrafts.CreateResponse createDrafts(TimelineDrafts.TimelineDraft draft) {
    TimelineDrafts.CreateRequest request =
        TimelineDrafts.CreateRequest.newBuilder().setDocument(draft).build();
    return blockingStub.create(request);
  }

  public TimelineDrafts.GetTimelineDraftsByChannelIdResponse getTimelineDraftsByChannelId(
      String channelId, String start, String stop) {
    TimelineDrafts.GetTimelineDraftsByChannelIdRequest.Builder request =
        TimelineDrafts.GetTimelineDraftsByChannelIdRequest.newBuilder()
            .setChannelId(channelId)
            .setStart(start);

    if (!stop.isEmpty()) request.setStop(stop);

    return blockingStub.getTimelineDraftsByChannelId(request.build());
  }

  public TimelineDrafts.GetTimelineDraftsLiteByChannelIdResponse
      getTimelineDraftsLiteByChannelIdRequest(String id, Long start, Long stop) {
    TimelineDrafts.GetTimelineDraftsLiteByChannelIdRequest.Builder builder =
        TimelineDrafts.GetTimelineDraftsLiteByChannelIdRequest.newBuilder();
    if (id != null) builder.setChannelId(id);
    if (start != null) builder.setStart(start);
    if (stop != null) builder.setStop(stop);

    return blockingStub.getTimelineDraftsLiteByChannelId(builder.build());
  }
}
