package io.delphi.qa.auto.awsmfrw.managers.helpers.aws;

import com.amazonaws.services.logs.AWSLogsAsync;
import com.amazonaws.services.logs.AWSLogsAsyncClientBuilder;
import com.amazonaws.services.logs.model.*;
import io.delphi.qa.auto.awsmfrw.common_baby.IsaLogging;
import io.qameta.allure.Step;

public class HlAwsLogs extends BsAwsSdkV1 {

  private AWSLogsAsync client;

  public HlAwsLogs() {
    client = AWSLogsAsyncClientBuilder.standard().withRegion(region).build();
  }

  @Step("AWS::Lambda: get response")
  public GetLogEventsResult getCWLogEvents(String logGroupName, String logStreamName) {
    GetLogEventsRequest getLogEventsRequest =
        new GetLogEventsRequest().withLogGroupName(logGroupName).withLogStreamName(logStreamName);
    GetLogEventsResult getLogEventsResult = null;
    //    getLogEventsResult = client.getLogEvents(getLogEventsRequest);
    DescribeLogStreamsRequest describeLogStreamsRequest =
        new DescribeLogStreamsRequest().withLogGroupName(logGroupName);
    DescribeLogStreamsResult describeLogStreamsResult =
        client.describeLogStreams(describeLogStreamsRequest);

    for (LogStream logStream : describeLogStreamsResult.getLogStreams()) {
      getLogEventsRequest =
          new GetLogEventsRequest()
              .withStartTime(DT_NOW.minusMinutes(15).getMillis())
              .withEndTime(DT_NOW.getMillis())
              .withLogGroupName(logGroupName)
              .withLogStreamName(logStream.getLogStreamName());

      GetLogEventsResult result = client.getLogEvents(getLogEventsRequest);

      result
          .getEvents()
          .forEach(
              outputLogEvent -> {
                IsaLogging.log(this.getClass(), outputLogEvent.getMessage());
              });
    }
    return getLogEventsResult;
  }
}
