
module billing_service {
  source = "git::ssh://git@bitbucket.org/netfoundry/nf-mop-tf.git//modules/aws/ecs_fargate_service"

  service_name = local.workspace["service_name"]
  container_count = var.task_count[terraform.workspace]
  task_definition = templatefile("${path.module}/templates/task-definition.json", local.task_definition_vars)
  task_role_arn         = aws_iam_role.billing_task_role.arn
  registry_arn = aws_service_discovery_service.billing_service.arn
  ecs_cluster_id = data.terraform_remote_state.mop_core.outputs.ecs_cluster_id
  cpu = "512"
  memory = "1024"
  execution_role_arn = aws_iam_role.billing_task_role.arn
  security_groups = [
    data.terraform_remote_state.mop_core.outputs.sg_http_private_id,
    data.terraform_remote_state.mop_core.outputs.sg_alb_id
  ]
  subnets = data.terraform_remote_state.mop_core.outputs.vpc_subnet_private_ids

  log_retention = 30
}

data "aws_secretsmanager_secret" "io_netfoundry_elasticsearch-client_password" {
  name = "io-netfoundry-elasticsearch-client-password"
}

data "aws_secretsmanager_secret" "io_netfoundry_billing_provider_stripe_apiKey" {
  name = "io-netfoundry-billing-provider-stripe-apiKey"
}

data "aws_secretsmanager_secret" "es_micrometer_creds" {
  name = "es_micrometer_creds"
}

data "aws_secretsmanager_secret" "chargebee_creds" {
  name = "chargebee_creds"
}

data "aws_secretsmanager_secret" "hubspot_private_app_access_token" {
  name = "hubspot_private_app_access_token"
}
data aws_secretsmanager_secret es_password {
  name = "io-netfoundry-elasticsearch-client-password"
}
data aws_secretsmanager_secret ns_certificate_id {
  name = "io-netfoundry-billing-ns-certificate-id"
}
data aws_secretsmanager_secret ns_client_id {
  name = "io-netfoundry-billing-ns-client-id"
}

locals {
  task_definition_vars = {
    image_url             = "745435643501.dkr.ecr.us-east-1.amazonaws.com/billing:${data.aws_ssm_parameter.container_image.value}"
    #image_url             = "netfoundry/billing:${data.aws_ssm_parameter.container_image.value}"
    container_name        = local.service_name
    container_port        = local.container_port
    log_group_region      = var.region[terraform.workspace]
    log_group_name        = module.billing_service.cwlog_group_name
    spring_profiles_active = local.deploy_env_name
    aws_default_region    = var.region[terraform.workspace]
    environment_name      = local.deploy_env_name
    subdomain             = local.subdomain
    zipkin_url            = data.terraform_remote_state.mop_core.outputs.zipkin_url
    sns_mop_events        = data.terraform_remote_state.mop_core.outputs.sns_mop_events_arn
    rds_endpoint          = module.rds_mysql_billing.rds_instance_address
    rds_username          = module.rds_mysql_billing.rds_username
    es_host               = data.terraform_remote_state.mop_core.outputs.es_host
    auth0_client_id       = auth0_client.client.client_id
    smtp_user             = local.smtp_user
    health_check_path     = local.workspace["health_check_path"]
    # secret plaintext as workaround while we're getting Spring secret store working
    es_metrics_pass       = data.aws_secretsmanager_secret.io_netfoundry_elasticsearch-client_password.arn
    auth0_client_secret   = auth0_client.client.client_secret
    # secret ARNs for .secrets[] in TD
    mysql_pass_arn            = data.aws_secretsmanager_secret.mysql_pass_billing.arn
    aws_mailer_secret_arn     = data.aws_secretsmanager_secret.aws_mailer_secret.arn
    stripe_api_key_arn        = data.aws_secretsmanager_secret.stripe_api_key.arn
    #docker_hub_secret_arn = data.terraform_remote_state.mop_core.outputs.dockerhub_secret_arn
    es_host = data.terraform_remote_state.mop_core.outputs.es_host
    es_micrometer_username = "${data.aws_secretsmanager_secret.es_micrometer_creds.arn}:username::"
    es_micrometer_password = "${data.aws_secretsmanager_secret.es_micrometer_creds.arn}:password::"
    chargebee_environment = "${data.aws_secretsmanager_secret.chargebee_creds.arn}:chargebee-environment::"
    chargebee_api_key = "${data.aws_secretsmanager_secret.chargebee_creds.arn}:chargebee-api-key::"
    redis_cluster_address  = data.terraform_remote_state.mop_core.outputs.redis_address
    redis_failover_address = data.terraform_remote_state.mop_core.outputs.redis_reader_address
    rabbit_mq_endpoints    = data.terraform_remote_state.central_mq.outputs.central_rabbitmq_endpoints
    rabbit_mq_username     = data.terraform_remote_state.central_mq.outputs.central_rabbitmq_mopuser
    rabbit_mq_secret_arn   = data.terraform_remote_state.central_mq.outputs.central_rabbitmq_secret_arn
    hubspot_private_app_access_token = data.aws_secretsmanager_secret.hubspot_private_app_access_token.arn
    es_url = var.es_host_map[terraform.workspace]
    es_max_total_conn = local.deploy_env_name == "production" ? "10" : "10"
    es_conn_per_route = local.deploy_env_name == "production" ? "10" : "10"
    es_conn_timeout = "5000"
    es_socket_timeout = "120000"
    es_username = "console_api"
    es_password_arn = data.aws_secretsmanager_secret.es_password.arn
    ns_certificate_id_arn = data.aws_secretsmanager_secret.ns_certificate_id.arn
    ns_client_id_arn = data.aws_secretsmanager_secret.ns_client_id.arn
    ns_token_url = var.ns_api_token_url_map[terraform.workspace]
    ns_api_base_url = var.ns_api_base_url_map[terraform.workspace]
    ns_restlet_api_base_url=var.ns_restlet_api_base_url_map[terraform.workspace]
    ns_scope = "rest_webservices,restlets"
  }
}
