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

import static tv.pluto.ip.dal.activeregion.ActiveRegions.GetDocumentsUpdatedBetweenDatesRequest;

import io.grpc.Channel;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
import org.assertj.core.util.Streams;
import tv.pluto.grpc.GenericGrpcClient;
import tv.pluto.ip.dal.activeregion.ActiveRegionManagerGrpc;
import tv.pluto.ip.dal.activeregion.ActiveRegions;
import tv.pluto.ip.dal.activeregion.ActiveRegions.CFeedsSyncAllIdsRequest;
import tv.pluto.ip.dal.activeregion.ActiveRegions.CFeedsSyncDocumentsRequest;

/** Class represents gRPC client for <b>active_regions.proto</b> file */
public class ActiveRegionsClient extends GenericGrpcClient {

  private ActiveRegionManagerGrpc.ActiveRegionManagerBlockingStub blockingStub;

  public ActiveRegionsClient(Channel channel) {
    this.getDocumentsUpdatedBetweenDatesRequestBuilder =
        GetDocumentsUpdatedBetweenDatesRequest.newBuilder();
    blockingStub = ActiveRegionManagerGrpc.newBlockingStub(channel);
    blockingStub = blockingStub.withInterceptors(CLIENT_INTERCEPTOR);
  }

  public Iterator<ActiveRegions.Id> cFeedsSyncAllIdsIterator() {
    CFeedsSyncAllIdsRequest cFeedsSyncAllIdsRequest = CFeedsSyncAllIdsRequest.newBuilder().build();
    return blockingStub.cFeedsSyncAllIds(cFeedsSyncAllIdsRequest);
  }

  public List<ActiveRegions.ActiveRegion> cFeedsSyncSyncDocumentsList(String lastRun) {
    CFeedsSyncDocumentsRequest cFeedsDocRequest =
        CFeedsSyncDocumentsRequest.newBuilder().setLastRunAt(lastRun).build();

    Iterator<tv.pluto.ip.dal.activeregion.ActiveRegions.ActiveRegion> iteratorResponse =
        blockingStub.cFeedsSyncDocuments(cFeedsDocRequest);
    return Streams.stream(iteratorResponse).collect(Collectors.toList());
  }

  public ActiveRegions.GetByCodeResponse getByCode(String code) {
    ActiveRegions.GetByCodeRequest request =
        ActiveRegions.GetByCodeRequest.newBuilder().setCode(code).build();
    return blockingStub.getByCode(request);
  }
}
