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

import com.amazonaws.services.s3.model.S3ObjectSummary;
import io.delphi.qa.auto.awsmfrw.common_baby.IsaCommonMethods;
import io.delphi.qa.auto.awsmfrw.common_baby.IsaConstants;
import io.delphi.qa.auto.awsmfrw.managers.helpers.common.IsaAssertions;
import io.delphi.qa.auto.awsmfrw.models.aws.lm.WpSlzUnitOfWork;

import java.util.Set;

public class HlAwsS3Asserts implements IsaConstants, IsaAssertions {

  public void assertS3BucketSize(
      Set<S3ObjectSummary> s3ObjectSummaries,
      WpSlzUnitOfWork wpSlzUnitOfWork,
      int requiredContextAmount) {
    int actualCount =
        (int)
            s3ObjectSummaries.stream()
                .map(rs -> rs.getKey().toLowerCase())
                .filter(
                    key -> {
                      boolean isExpectedDsp = key.contains(wpSlzUnitOfWork.getDsp());
                      boolean isExpectedReportDate =
                          key.contains(
                              IsaCommonMethods.printDateTimeText(
                                  wpSlzUnitOfWork.getReportDate(), "yyyy-MM-dd"));
                      //                      boolean isExpectedDate = key.contains(
                      //                          IsaCommonMethods.printDateTimeText(
                      //                              wpSlzUnitOfWork.getReportDate(), "yyyyMMdd"));
                      boolean isExpectedVersion = key.contains(wpSlzUnitOfWork.getVersion());
                      return isExpectedDsp && isExpectedReportDate && isExpectedVersion;
                    })
                .count();
    isaAssertTrue(
        envConfig.whichCompleteCriteria() != -1
            ? actualCount == requiredContextAmount
            : actualCount <= requiredContextAmount,
        String.format(
            "S3 bucket required content amount size expected=%s < actual=%s: ",
            requiredContextAmount, actualCount));
    // TODO by alexeyisakov @9/13/21#11:02 AM: Implement file name pattern matching after adding
    // config implementation
    //    if (requiredContextAmount > 0) {
    //      isaAssertEquals(
    //          s3ObjectSummaries.iterator().next().getKey().split("\\.").length,
    //          2,
    //          "s3 key has two extensions, instead of one:");
    //    }
  }
}
