package tv.pluto.grpc.cron_history;

import io.grpc.Channel;
import java.util.List;
import tv.pluto.grpc.GenericGrpcClient;
import tv.pluto.ip.dal.cronhistory.CronHistoryManagerGrpc;
import tv.pluto.ip.dal.cronhistory.CronHistoryOuterClass;

public class CronHistoryClient extends GenericGrpcClient {
  private CronHistoryManagerGrpc.CronHistoryManagerBlockingStub blockingStub;

  public CronHistoryClient(Channel channel) {
    blockingStub = CronHistoryManagerGrpc.newBlockingStub(channel);
    blockingStub = blockingStub.withInterceptors(CLIENT_INTERCEPTOR);
  }

  public List<CronHistoryOuterClass.CronHistory> getCronHistory(String ranAt, String operator) {
    CronHistoryOuterClass.GetCronHistoryRequest.Builder builder =
        CronHistoryOuterClass.GetCronHistoryRequest.newBuilder();

    if (ranAt != null) builder.setRanAt(ranAt);

    if (operator != null) builder.setOperator(operator);

    return blockingStub.getCronHistory(builder.build()).getDocumentsList();
  }

  public CronHistoryOuterClass.CronHistory updateFields(
      String id, CronHistoryOuterClass.CronHistory history, List<String> updateFields) {
    CronHistoryOuterClass.UpdateFieldsRequest.Builder builder =
        CronHistoryOuterClass.UpdateFieldsRequest.newBuilder();

    if (id != null) builder.setId(id);

    if (history != null) builder.setDocument(history);

    if (!updateFields.isEmpty()) builder.addAllUpdateFields(updateFields);

    return blockingStub.updateFields(builder.build()).getDocument();
  }
}
