//package io.delphi.qa.auto.awsmfrw.managers.helpers.perf;
//
//import io.delphi.qa.auto.awsmfrw.common_baby.IsaCommonMethods;
//import io.delphi.qa.auto.awsmfrw.common_baby.IsaConstants;
//import io.delphi.qa.auto.awsmfrw.common_baby.delphi.aws.EnAwsSecrets;
//import io.delphi.qa.auto.awsmfrw.common_baby.delphi.aws.ICanFetchAwsSecret;
//import io.delphi.qa.auto.awsmfrw.models.api.perf.EnDelphiPerfInfluxEndpoints;
//import io.delphi.qa.auto.awsmfrw.models.api.rest.v3.EnDelphiApiV3_EndPointItems;
//import io.delphi.qa.auto.awsmfrw.models.api.rest.v3.methods.params.ICanFetchHeaders;
//import org.eclipse.jetty.http.HttpMethod;
//import us.abstracta.jmeter.javadsl.JmeterDsl;
//import us.abstracta.jmeter.javadsl.core.assertions.DslResponseAssertion;
//import us.abstracta.jmeter.javadsl.http.DslHttpSampler;
//import us.abstracta.jmeter.javadsl.http.HttpHeaders;
//
//import static org.eclipse.jetty.http.HttpStatus.NO_CONTENT_204;
//
//public class MgJmeterHttpSampler implements ICanFetchAwsSecret, ICanFetchHeaders, IsaCommonMethods {
//
//  private final String OK = "200";
//  private final String delphiBaseUrl =
//      String.format(
//          "%s://%s/v3",
//          IsaConstants.HTTPS,
//          String.format(
//              envConfig.delphiApiHostPattern(), System.getProperty("delphi.env.run", envConfig.env())));
//
//  private final String authToken = fetchHeaderAuth0authToken().get("Authorization");
//
//  private final String AUTH_BODY =
//      IsaCommonMethods.buildOAuthTokenBodies(fetchAwsSecret(EnAwsSecrets.DELPHI_API_JAVA_OAUTH))
//          .get(0);
//
//  private final String influxBaseUrl =
//      String.format(
//          "%s://%s:%s",
//          IsaConstants.HTTP, envConfig.perfDbInfluxHost(), envConfig.perfDbInfluxPort());
//  private final String STR_START_EVENT_BODY =
//      String.format(
//          "events,application=%s,title=%s text=\"${__groovy(def Tag1='${__dateTimeConvert(${__P(TESTSTART.MS)},,dd-MM-yy_HH:mm,)}' + ' ' + '%s'.toString() + ' ' + 'now()'; return Tag1;)}\" ${__groovy(return (new Date().getTime()).toString() + \"000000\")}",
//          envConfig.perfAppName(), envConfig.perfTestRunName(), envConfig.perfTestRunDuration());
//
//  private final String STR_END_EVENT_BODY =
//      String.format(
//          "events,application=%s,title=%s text=\"${__groovy(def EndTime = new Date(); def Tag1 = '${__dateTimeConvert(${__P(TESTSTART.MS)},,dd-MM-yy_HH:mm,)}' + ' ' + '%s'.toString() + ' ' + EndTime.getTime().toString().take(10) + 's'; return Tag1;)}\" ${__groovy(startTest = new Date(); Tag = startTest.getTime() + '000000'; return Tag;)}",
//          envConfig.perfAppName(), envConfig.perfTestRunName(), envConfig.perfTestRunDuration());
//
//  public DslHttpSampler influxStartEvent() {
//    return JmeterDsl.httpSampler(
//            "startEvent_pathWrite_queries_dbEqInfluxDbName",
//            influxBaseUrl
//                + EnDelphiPerfInfluxEndpoints.WRITE.get()
//                + String.format("?db=%s", envConfig.perfDbInfluxName()))
//        .method(HttpMethod.POST)
//        .body(STR_START_EVENT_BODY);
//  }
//
//  public DslHttpSampler influxEndEvent() {
//    //    /write?
//    return JmeterDsl.httpSampler(
//            "startEvent_pathWrite_queries_dbEqInfluxDbName",
//            influxBaseUrl
//                + EnDelphiPerfInfluxEndpoints.WRITE.get()
//                + String.format("?db=%s", envConfig.perfDbInfluxName()))
//        .method(HttpMethod.POST)
//        .body(STR_END_EVENT_BODY)
//        .children(
//            JmeterDsl.responseAssertion()
//                .fieldToTest(DslResponseAssertion.TargetField.RESPONSE_CODE)
//                .containsSubstrings(String.valueOf(NO_CONTENT_204)));
//  }
//
//  public HttpHeaders defaultHeaders() {
//    HttpHeaders httpHeaders = JmeterDsl.httpHeaders();
//    fetchDefaultHeaders().forEach(httpHeaders::header);
//    return httpHeaders;
//  }
//
//  protected DslHttpSampler oAuth() {
//    return JmeterDsl.httpSampler(
//            "assertSc200_pathAuthToken", delphiBaseUrl + EnDelphiApiV3_EndPointItems.OAUTH_TOKEN.get())
//        .method(HttpMethod.POST)
//        .body(AUTH_BODY)
//        .children(
//            JmeterDsl.responseAssertion()
//                .fieldToTest(DslResponseAssertion.TargetField.RESPONSE_CODE)
//                .containsSubstrings(OK),
//            JmeterDsl.responseAssertion()
//                .fieldToTest(DslResponseAssertion.TargetField.RESPONSE_BODY)
//                .containsSubstrings("access_token"));
//  }
//
//  protected DslHttpSampler health() {
//    return JmeterDsl.httpSampler(
//            "assertSc200_pathHealth", delphiBaseUrl + EnDelphiApiV3_EndPointItems.HEALTH.get())
//        .header("Authorization", authToken)
//        .method(HttpMethod.GET)
//        .children(
//            JmeterDsl.responseAssertion()
//                .fieldToTest(DslResponseAssertion.TargetField.RESPONSE_CODE)
//                .containsSubstrings(OK),
//            JmeterDsl.responseAssertion()
//                .fieldToTest(DslResponseAssertion.TargetField.RESPONSE_BODY)
//                .containsSubstrings("\"status\":\"UP\""));
//  }
//
//  protected DslHttpSampler dataHealthCompleteness() {
//    return JmeterDsl.httpSampler(
//            "assertSc200_pathDataHealthCompleteness",
//            delphiBaseUrl + EnDelphiApiV3_EndPointItems.DATA_HEALTH_COMPLETENESS.get())
//        .header("Authorization", authToken)
//        .method(HttpMethod.GET)
//        .children(
//            JmeterDsl.responseAssertion()
//                .fieldToTest(DslResponseAssertion.TargetField.RESPONSE_CODE)
//                .containsSubstrings(OK),
//            JmeterDsl.responseAssertion()
//                .fieldToTest(DslResponseAssertion.TargetField.RESPONSE_BODY)
//                .containsSubstrings("\"count\":4"));
//  }
//
//  protected DslHttpSampler dataHealthChartPositions() {
//    return JmeterDsl.httpSampler(
//            "assertSc200_pathDataHealthChartPositions",
//            delphiBaseUrl + EnDelphiApiV3_EndPointItems.DATA_HEALTH_CHART_POSITIONS.get())
//        .header("Authorization", authToken)
//        .method(HttpMethod.GET)
//        .children(
//            JmeterDsl.responseAssertion()
//                .fieldToTest(DslResponseAssertion.TargetField.RESPONSE_CODE)
//                .containsSubstrings(OK),
//            JmeterDsl.responseAssertion()
//                .fieldToTest(DslResponseAssertion.TargetField.RESPONSE_BODY)
//                .containsSubstrings("\"count\":2"));
//  }
//}
