package io.delphi.qa.auto.awsmfrw.managers.helpers.api.rest;

import com.github.viclovsky.swagger.coverage.CoverageOutputWriter;
import com.github.viclovsky.swagger.coverage.FileSystemOutputWriter;
import com.github.viclovsky.swagger.coverage.SwaggerCoverageConstants;
import com.github.viclovsky.swagger.coverage.SwaggerCoverageRestAssured;
import io.delphi.qa.auto.awsmfrw.common_baby.IsaConstants;
import io.restassured.http.ContentType;

import java.nio.file.Path;
import java.nio.file.Paths;

public class HlApiRestJavaV3Client extends AbstractRestAssuredClient {

  private HlJavaV3Asserts asserts;

  public HlApiRestJavaV3Client(String... tokens) {
    baseSpec
        .baseUri(
            String.format(
                "%s://%s",
                IsaConstants.HTTPS,
                String.format(
                    envConfig.delphiApiHostPattern(),
                    System.getProperty("delphi.env.run", envConfig.env()))))
        .port(envConfig.delphiApiPort())
        .basePath("/v3")
        .filter(new SwaggerCoverageRestAssured(defaultWriter()))
        .headers("Client-Service", "Automation-Framework", "Client-Environment", envConfig.env())
        .contentType(ContentType.JSON)
        .urlEncodingEnabled(false);
    if (tokens.length != 0) {
      baseSpec.auth().oauth2(tokens[0]);
    }
    super.iSaidLogIt();
  }

  private CoverageOutputWriter defaultWriter() {
    final Path build = Paths.get("build");
    return new FileSystemOutputWriter(build.resolve(SwaggerCoverageConstants.OUTPUT_DIRECTORY));
  }

  public HlJavaV3Asserts asserts() {
    return asserts == null ? asserts = new HlJavaV3Asserts() : asserts;
  }
}
