variable "AWS_ACCESS_KEY_ID" {}
variable "AWS_SECRET_ACCESS_KEY" {}
variable "SENTRY_DSN" {}
variable "SNOWFLAKE_PASSWORD" {}
variable "SPOTIFY_API_CLIENT_ID" {}
variable "SPOTIFY_API_CLIENT_SECRET" {}

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

terraform {
  backend "s3" {
    bucket  = "orcd-terraform-state"
    key     = "qa/swf-spotify-backfill/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}

data "aws_secretsmanager_secret_version" "aws_access_key_id" {
  secret_id = "${var.environment}/${var.service_name}/AWS_ACCESS_KEY_ID"
}

data "aws_secretsmanager_secret_version" "snowflake_password" {
  secret_id = "${var.environment}/${var.service_name}/SNOWFLAKE_PASSWORD"
}

data "aws_secretsmanager_secret_version" "aws_secret_access_key" {
  secret_id = "${var.environment}/${var.service_name}/AWS_SECRET_ACCESS_KEY"
}

data "aws_secretsmanager_secret_version" "sentry_dsn" {
  secret_id = "${var.environment}/${var.service_name}/SENTRY_DSN"
}

data "aws_secretsmanager_secret_version" "spotify_api_client_id" {
  secret_id = "${var.environment}/${var.service_name}/SPOTIFY_API_CLIENT_ID"
}

data "aws_secretsmanager_secret_version" "spotify_api_client_secret" {
  secret_id = "${var.environment}/${var.service_name}/SPOTIFY_API_CLIENT_SECRET"
}

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

  environment                          = var.environment
  service_name                         = var.service_name
  use_existing_application             = true
  existing_application_name            = "swf-feed-ingestion"
  launchconfiguration_instance_type    = "t3.medium"
  update_max_batch                     = "1"
  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"
  environment_tier                     = "Worker"
  notification_endpoints               = "data-squad@theorchard.com"
  vpc_elb_subnets                      = "subnet-5366ef24"
  process_instance_health_check_path   = ""
  launchconfiguration_root_volume_size = "200"
  asg_max_size                         = "1"
  update_min_in_service                = "0"

  environment_variables = [
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name = "Environment"
      value = var.environment
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name = "AWS_REGION"
      value = var.AWS_REGION
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name = "AWS_SECRET_ACCESS_KEY"
      value = var.AWS_SECRET_ACCESS_KEY
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name = "AWS_ACCESS_KEY_ID"
      value = var.AWS_ACCESS_KEY_ID
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name = "SNOWFLAKE_USER"
      value = var.SNOWFLAKE_USER
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name = "SNOWFLAKE_ROLE"
      value = var.SNOWFLAKE_ROLE
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name = "SNOWFLAKE_WAREHOUSE"
      value = var.SNOWFLAKE_WAREHOUSE
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name = "SNOWFLAKE_ACCOUNT"
      value = var.SNOWFLAKE_ACCOUNT
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name = "SNOWFLAKE_DATABASE"
      value = var.SNOWFLAKE_DATABASE
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name = "SNOWFLAKE_SCHEMA"
      value = var.SNOWFLAKE_SCHEMA
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name = "SNOWFLAKE_PASSWORD"
      value = var.SNOWFLAKE_PASSWORD
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name = "FEED_INGESTION_TABLE"
      value = var.FEED_INGESTION_TABLE
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name      = "FEED_INGESTION_DATA_BUCKET"
      value     = var.FEED_INGESTION_DATA_BUCKET
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name      = "SPOTIFY_API_CLIENT_ID"
      value     = var.SPOTIFY_API_CLIENT_ID
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name      = "SPOTIFY_API_CLIENT_SECRET"
      value     = var.SPOTIFY_API_CLIENT_SECRET
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name = "SWF_DOMAIN"
      value = var.SWF_DOMAIN
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name = "SENTRY_DSN"
      value = var.SENTRY_DSN
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name = "LOGGLY_URI"
      value = var.LOGGLY_URI
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name = "FEED_INGESTION_SNS_TOPIC"
      value = var.FEED_INGESTION_SNS_TOPIC
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name = "SPOTIFY_API_LICENSOR_SME"
      value = var.SPOTIFY_API_LICENSOR_SME
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name = "SPOTIFY_API_LICENSOR_THEORCHARD"
      value = var.SPOTIFY_API_LICENSOR_THEORCHARD
    },
    {
      namespace = "aws:elasticbeanstalk:application:environment"
      name = "SPOTIFY_API_VERSION"
      value = var.SPOTIFY_API_VERSION
    }
  ]
}

# sentry
module "swf_spotify_backfill_sentry_project" {
  source = "git@github.com:theorchard/terraform-sentry//?ref=1.0.0"
  service_name = var.service_name
  environment  = var.environment
  team         = var.environment
  platform     = "python"
}
