package com.airbnb.billow;

import com.amazonaws.services.elasticsearch.model.ElasticsearchClusterConfig;
import com.amazonaws.services.elasticsearch.model.ElasticsearchDomainStatus;
import com.amazonaws.services.elasticsearch.model.Tag;
import lombok.Getter;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ElasticsearchCluster {
  @Getter
  private final String domainName;
  @Getter
  private final Map<String, String> tags;
  @Getter
  private final String version;
  @Getter
  private final String instanceType;
  @Getter
  private final int instanceCount;
  @Getter
  private final Map<String, String> endpoints;
  @Getter
  private final boolean dedicatedMasterEnabled;
  @Getter
  private final boolean zoneAwarenessEnabled;
  @Getter
  private final String dedicatedMasterType;
  @Getter
  private final int dedicatedMasterCount;

  public ElasticsearchCluster(ElasticsearchDomainStatus domainStatus, List<Tag> tagList) {
    this.domainName = domainStatus.getDomainName();
    this.tags = new HashMap<>(tagList.size());
    for(Tag tag : tagList) {
      this.tags.put(tag.getKey(), tag.getValue());
    }
    this.version = domainStatus.getElasticsearchVersion();
    this.endpoints = domainStatus.getEndpoints();

    ElasticsearchClusterConfig esConfig = domainStatus.getElasticsearchClusterConfig();
    this.instanceType = esConfig.getInstanceType();
    this.instanceCount = esConfig.getInstanceCount();
    this.dedicatedMasterEnabled = esConfig.getDedicatedMasterEnabled();
    this.zoneAwarenessEnabled = esConfig.getZoneAwarenessEnabled();
    this.dedicatedMasterType = esConfig.getDedicatedMasterType();
    this.dedicatedMasterCount = esConfig.getDedicatedMasterCount();
  }
}