package software.amazon.kendraranking.executionplan;

import com.google.common.collect.ImmutableMap;

import java.net.URI;
import java.time.Duration;
import java.util.Map;

import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.kendraranking.KendraRankingClient;
import software.amazon.cloudformation.LambdaWrapper;
import software.amazon.awssdk.core.retry.RetryPolicy;
import software.amazon.awssdk.core.retry.backoff.BackoffStrategy;
import software.amazon.awssdk.core.retry.backoff.EqualJitterBackoffStrategy;
import software.amazon.awssdk.core.retry.conditions.RetryCondition;

public class ClientBuilder {

//  private static final BackoffStrategy KENDRA_RANKING_BACKOFF_THROTTLING_STRATEGY =
//      EqualJitterBackoffStrategy.builder()
//          .baseDelay(Duration.ofMinutes(1))
//          .maxBackoffTime(Duration.ofMinutes(2))
//          .build();
//
//  private static final RetryPolicy KENDRA_RANKING_RETRY_POLICY =
//      RetryPolicy.builder()
//          .numRetries(3)
//          .retryCondition(RetryCondition.defaultRetryCondition())
//          .throttlingBackoffStrategy(KENDRA_RANKING_BACKOFF_THROTTLING_STRATEGY)
//          .build();
  public static KendraRankingClient getClient(String region) {
    return KendraRankingClient.builder().httpClient(LambdaWrapper.HTTP_CLIENT)
        // TODO remove region after opensearch launch
        .endpointOverride(URI.create("https://kendra-ranking." + region + ".api.aws"))
        .overrideConfiguration(ClientOverrideConfiguration.builder()
            //.retryPolicy(KENDRA_RANKING_RETRY_POLICY)
            .build())
        .region(REGIONS.get(region))
        .build();
  }

  // TODO remove after opensearch launch
  static final Map<String, Region> REGIONS = ImmutableMap.<String, Region>builder()
      .put("us-west-2", Region.US_WEST_2)
      .put("us-east-1", Region.US_EAST_1)
      .put("us-east-2", Region.US_EAST_2)
      .put("eu-west-1", Region.EU_WEST_1)
      .put("ap-south-1", Region.AP_SOUTH_1)
      .put("ap-southeast-1", Region.AP_SOUTHEAST_1)
      .put("ap-southeast-2", Region.AP_SOUTHEAST_2)
      .put("ca-central-1", Region.CA_CENTRAL_1)
      .build();



}