variable env {}

# Elastic Beanstalk environment variables
variable LOGGER_DSN {}
variable DATADOG_ENV {}
variable DD_APM_ANALYZED_SPANS {}
variable SENTRY_DSN {}
variable SNOWFLAKE_ACCOUNT {}
variable SNOWFLAKE_SCHEMA {}
variable SNOWFLAKE_DATABASE {}
variable SNOWFLAKE_WAREHOUSE {}
variable SNOWFLAKE_PASSWORD {}
variable SNOWFLAKE_ROLE {}
variable SNOWFLAKE_USER {}
variable SNOWFLAKE_APOLLO_DATABASE {}
variable SNOWFLAKE_APOLLO_SCHEMA {}
variable DYNAMO_TABLE {}
variable REDIS_HOST {}
variable REDIS_PORT {}

provider "aws" {
  region = "us-east-1"
}

# Terraform backends cannot contain interpolations
terraform {
  backend "s3" {
    bucket         = "orcd-terraform-state"
    key            = "prod/bff-mobile/terraform.tfstate"
    region         = "us-east-1"
    encrypt        = "true"
    dynamodb_table = "terraform-prod-bff-mobile"
  }
}

module "bff_mobile_owsrequest" {
  source = "git@github.com:theorchard/terraform-owsrequest.git//"

  environment_name = "${var.env}"
  service_name     = "bff-mobile"
}

module "elasticache" {
  source = "git@github.com:theorchard/terraform-elasticache.git"

  environment             = "${var.env}"
  service_name            = "bff-mobile"
  cache_engine            = "redis"
  cache_subnet_group_name = "prod-vpc-orchard-subnet"

  cache_security_group_ids = [
    "sg-0fd5f099ed49e7d9d",
  ]
}

module "bff_mobile_environment" {
  source = "git@github.com:theorchard/terraform-elasticbeanstalk.git//"

  environment                  = "${var.env}"
  service_name                 = "bff-mobile"
  asg_min_size                 = "2"
  asg_max_size                 = "4"
  update_max_batch             = "1"
  vpc_elb_subnets              = "subnet-cb4dbae0,subnet-5366ef24"
  vpc_subnets                  = "subnet-cb4dbae0,subnet-5366ef24"
  vpc_id                       = "vpc-7f0e841a"
  aws_route53_zone_id          = "Z2RSKZ9M7TJ9Z"
  elb_v2_access_logs_s3_bucket = "aws-logs-437795906767-us-east-1"

  iam_managed_policy_attachments = [
    "${module.bff_mobile_owsrequest.policy_arn_output}",
  ]

  load_balancer_listener_port       = "443"
  load_balancer_listener_protocol   = "HTTPS"
  load_balancer_ssl_certificate_arn = "arn:aws:acm:us-east-1:437795906767:certificate/a76e4883-28aa-4062-a4cc-c06b8012ae28"
  process_port                      = "80"
  process_protocol                  = "HTTP"

  environment_variables = [
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name      = "Environment"
      value     = "${var.env}"
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name      = "LOGGER_DSN"
      value     = "${var.LOGGER_DSN}"
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name      = "DATADOG_ENV"
      value     = "${var.env}-bff-mobile"
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name      = "DD_APM_ANALYZED_SPANS"
      value     = "flask|flask.request=1,requests|requests.request=1"
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name      = "SENTRY_DSN"
      value     = "${var.SENTRY_DSN}"
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name      = "SNOWFLAKE_ACCOUNT"
      value     = "${var.SNOWFLAKE_ACCOUNT}"
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name      = "SNOWFLAKE_SCHEMA"
      value     = "${var.SNOWFLAKE_SCHEMA}"
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name      = "SNOWFLAKE_DATABASE"
      value     = "${var.SNOWFLAKE_DATABASE}"
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name      = "SNOWFLAKE_WAREHOUSE"
      value     = "${var.SNOWFLAKE_WAREHOUSE}"
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name      = "SNOWFLAKE_APOLLO_DATABASE"
      value     = "${var.SNOWFLAKE_APOLLO_DATABASE}"
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name      = "SNOWFLAKE_APOLLO_SCHEMA"
      value     = "${var.SNOWFLAKE_APOLLO_SCHEMA}"
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name      = "DYNAMO_TABLE"
      value     = "${var.DYNAMO_TABLE}"
    },
  ]
}
