# Elastic search
/*
resource "aws_cloudwatch_log_group" "pgsync_es" {
  name = "${local.name_prefix}-pgsync-es"
  tags = merge(
    local.common_tags,
    {
      project                  = "Apps API",
      service                  = "CW",
      plat_env_project_service = "${local.aggregated_tag}_APPA_CW"
    }
  )
}

data "aws_iam_policy_document" "es_log_publishing_policy" {
  statement {
    actions = [
      "logs:CreateLogStream",
      "logs:PutLogEvents",
      "logs:PutLogEventsBatch",
    ]

    resources = ["arn:aws:logs:*"]

    principals {
      identifiers = ["es.amazonaws.com"]
      type        = "Service"
    }
  }
}

resource "aws_cloudwatch_log_resource_policy" "es_resource_policy" {
  policy_name     = "${local.name_prefix}-es-logging"
  policy_document = data.aws_iam_policy_document.es_log_publishing_policy.json
}

data "aws_iam_policy_document" "pgsync_es_access_policy" {
  statement {
    actions = ["es:*"]

    resources = ["arn:aws:es:us-east-1:${local.account_id}:domain/${local.name_prefix}-pgsync-poc/*"]

    principals {
      identifiers = ["*"]
      type        = "AWS"
    }
  }
}

data "aws_security_group" "es" {
  tags = {
    Name = "${local.name_prefix}-sg-es"
  }
}

data "aws_security_group" "http_debug" {
  tags = {
    Name = "${local.name_prefix}-sg-debug-http"
  }
}

data "aws_security_group" "https_debug" {
  tags = {
    Name = "${local.name_prefix}-sg-debug-https"
  }
}

data "aws_security_group" "redis_debug" {
  tags = {
    Name = "${local.name_prefix}-sg-redis-debug"
  }
}

resource "aws_elasticsearch_domain" "pgsync" {
  domain_name           = "${local.name_prefix}-pgsync-poc"
  elasticsearch_version = "7.10"

  cluster_config {
    instance_type = "t3.small.elasticsearch"
  }

  vpc_options {
    subnet_ids = [tolist(data.aws_subnets.private_subnets.ids)[0]]

    security_group_ids = [
      data.aws_security_group.es.id,
      data.aws_security_group.http_debug.id,
      data.aws_security_group.https_debug.id,
    ]
  }

  ebs_options {
    ebs_enabled = true
    volume_size = 10
    volume_type = "gp2"
  }

  log_publishing_options {
    cloudwatch_log_group_arn = aws_cloudwatch_log_group.pgsync_es.arn
    log_type                 = "INDEX_SLOW_LOGS"
  }

  advanced_options = {
    "rest.action.multi.allow_explicit_index" = "true"
  }

  access_policies = data.aws_iam_policy_document.pgsync_es_access_policy.json

  snapshot_options {
    automated_snapshot_start_hour = 23
  }

  tags = merge(
    local.common_tags,
    {
      Name                     = "${local.name_prefix}-pgsync-poc",
      project                  = "Apps API",
      service                  = "Elastic Search",
      plat_env_project_service = "${local.aggregated_tag}_APPA_ELS"
    }
  )
}

# Redis
resource "aws_elasticache_parameter_group" "pgsync" {
  name   = "${local.name_prefix}-pgsync-parameter-group"
  family = "redis6.x"
}

data "aws_security_group" "redis" {
  tags = {
    Name = "${local.name_prefix}-sg-redis"
  }
}

resource "aws_elasticache_cluster" "pgsync" {
  cluster_id           = "${local.name_prefix}-pgsync"
  engine               = "redis"
  engine_version       = "6.x"
  parameter_group_name = aws_elasticache_parameter_group.pgsync.name
  node_type            = "cache.t2.micro"
  num_cache_nodes      = 1
  subnet_group_name    = "${local.name_prefix}-cache-subnet-group"
  security_group_ids   = [data.aws_security_group.redis.id, data.aws_security_group.redis_debug.id]
  apply_immediately    = true
  port                 = 6379

  tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "Elasticache",
      plat_env_project_service = "${local.aggregated_tag}_PRL_ELC"
    }
  )
}

# Task
module "slz_admin_role" {
  source              = "../../../modules/iam/roles/ecs_task_role"
  enable_default_role = false
  name_prefix         = local.name_prefix
  name                = "slz_admin_role"
  common_tags = merge(
    local.common_tags,
    {
      project                  = "SLZ",
      service                  = "ECS",
      plat_env_project_service = "${local.aggregated_tag}_SLZ_ECS"
    }
  )
  policies_list = [
    data.aws_iam_policy.secrets-services-ro.arn,
    data.aws_iam_policy.logging.arn,
    module.iam_map.db_rw.arn,
    module.iam_map.sqs_producer.arn,
    module.iam_map.lambda_invoke.arn,
    module.iam_map.s3_env_ro.arn,
    module.iam_map.s3_sme_data_ro.arn,
  ]
}

module "slz_admin_task_def" {
  source = "../../../modules/ecs/tasks/fargate_v3"

  env_prefix      = local.env_prefix
  project_group   = local.project_group
  family          = "${local.env_prefix}-${local.project_group}-pgsync"
  container_name  = "pgsync"
  container_image = "475275892927.dkr.ecr.us-east-1.amazonaws.com/delphi/pgsync:${local.docker_image_env_tag[var.platform.prefix]}"
  cpu             = 1024
  memory          = 4096

  task_role_arn = module.slz_admin_role.role.arn
  exec_role_arn = data.aws_iam_role.standard_exec.arn

  env_vars = [
    { name  = "ELASTICSEARCH_SCHEME", value = "https" },
    { name  = "ELASTICSEARCH_HOST", value = "" },
    { name  = "ELASTICSEARCH_PORT", value = "9200" },
    { name  = "ELASTICSEARCH_VERIFY_CERTS", value = "True" },
    { name  = "ELASTICSEARCH_USE_SSL", value = "True" },
    { name  = "ELASTICSEARCH_AWS_REGION", value = "" },
    { name  = "ELASTICSEARCH_AWS_HOSTED", value = "True" },
    { name  = "PG_CONFIG_SECRET", value = "" },
    { name  = "REDIS_HOST", value = "" },
  ]
  #secrets = local.delphi_api_secrets_formatted

  datadog_enabled    = false

  common_tags = merge(
    local.common_tags,
    {
      project                  = "SLZ",
      service                  = "ECS",
      plat_env_project_service = "${local.aggregated_tag}_SLZ_ECS"
    }
  )
}

module "slz_admin_service" {
  source = "../../../modules/ecs/services/service_taskless_v2"

  env_prefix    = local.env_prefix
  project       = "pgsync"
  project_group = local.project_group

  cluster_arn   = data.aws_ecs_cluster.main.arn
  desired_count = 1

  security_groups = [data.aws_security_group.main.id]
  subnets         = data.aws_subnets.private_subnets.ids
  vpc_id          = data.aws_vpc.main.id

  task_definition_arn     = module.slz_admin_task_def.arn
  enable_ecs_managed_tags = true

  common_tags = merge(
    local.common_tags,
    {
      project                  = "SLZ",
      service                  = "ECS",
      plat_env_project_service = "${local.aggregated_tag}_SLZ_ECS"
    }
  )
}
*/
