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

import static tv.pluto.ip.dal.appname.AppNames.GetDocumentsUpdatedBetweenDatesRequest;

import io.grpc.Channel;
import java.util.Iterator;
import java.util.List;
import tv.pluto.grpc.GenericGrpcClient;
import tv.pluto.ip.dal.appname.AppNameManagerGrpc;
import tv.pluto.ip.dal.appname.AppNames;
import tv.pluto.utils.CommonUtils;

/** Class represents gRPC client for <b>app_names.proto</b> file */
public class AppNamesClient extends GenericGrpcClient {
  private AppNames.GetAllPagedRequest.Builder getAllPagedBuilder =
      AppNames.GetAllPagedRequest.newBuilder();
  private AppNameManagerGrpc.AppNameManagerBlockingStub blockingStub;

  public AppNamesClient(Channel channel, boolean auth) {
    blockingStub = AppNameManagerGrpc.newBlockingStub(channel);

    if (auth) blockingStub = blockingStub.withInterceptors(CLIENT_INTERCEPTOR_AUTH);
    else blockingStub = blockingStub.withInterceptors(CLIENT_INTERCEPTOR);
    this.getDocumentsUpdatedBetweenDatesRequestBuilder =
        GetDocumentsUpdatedBetweenDatesRequest.newBuilder();
  }

  public <T> T getByDeviceIdRequest(String deviceId) {
    AppNames.GetByDeviceIdRequest request =
        AppNames.GetByDeviceIdRequest.newBuilder().setDeviceId(deviceId).build();
    Iterator<AppNames.AppName> byDeviceId = blockingStub.getByDeviceId(request);
    return CommonUtils.iteratorToListOf(byDeviceId);
  }

  public List<AppNames.AppName> getAll() {
    AppNames.GetAllRequest allRequest = AppNames.GetAllRequest.newBuilder().build();
    Iterator<AppNames.AppName> allIterator = blockingStub.getAll(allRequest);
    return CommonUtils.iteratorToListOf(allIterator);
  }

  public AppNames.CreateResponse create(AppNames.CreateRequest request) {
    return blockingStub.create(request);
  }

  public AppNames.UpdateFieldsResponse update(AppNames.UpdateFieldsRequest request) {
    return blockingStub.updateFields(request);
  }
}
