module "default_tags" {
  source             = "git@github.com:theorchard/terraform-default-tags.git//?ref=2.0.0"
  environment        = var.environment
  application_family = var.application_family
  service_name       = var.service_name
  team_name          = var.team_name
}

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

  default_tags {
    tags = module.default_tags.tags
  }
}

data "aws_caller_identity" "current" {
}

terraform {
  backend "s3" {
    bucket  = "orcd-terraform-state"
    key     = "prod/snowflake-etl/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}

module "vpc_info" {
  source = "git@github.com:theorchard/terraform-vpc-info.git//?ref=3.1.0"

  environment = var.environment
}

module "multiple_secrets_with_same_settings" {
  source   = "git@github.com:theorchard/terraform-secrets-manager.git//?ref=1.5.1"
  for_each = toset(var.secrets_manager_secret_names)

  environment        = var.environment
  service_name       = var.service_name
  secret_name        = each.value
  application_family = var.application_family
}

module "fargate_environment" {
  source = "git@github.com:theorchard/terraform-fargate.git//?ref=5.6.1"

  providers = {
    aws.dns = aws
  }

  environment                 = var.environment
  service_name                = var.service_name
  application_family          = var.application_family
  aws_region                  = var.aws_region
  additional_tags             = var.additional_tags
  commit_sha                  = "latest"
  container_port              = "8080"
  task_type                   = "worker"
  desired_task_count          = 1
  task_cpu                    = 2048
  task_memory                 = 4096
  task_ephemeral_storage_size = 100
  maximum_capacity            = 1
  minimum_capacity            = 1
  vpc_id                      = module.vpc_info.vpc_id
  iam_managed_policy_attachments = [
    "arn:aws:iam::${data.aws_caller_identity.current.account_id}:policy/Dynamo-prod_sql2sf_table_sync_status-RW",
    "arn:aws:iam::${data.aws_caller_identity.current.account_id}:policy/Dynamo-prod_feed_sender_status-RW",
    "arn:aws:iam::${data.aws_caller_identity.current.account_id}:policy/Dynamo-prod_feed_ingestion_status-RW",
    "arn:aws:iam::${data.aws_caller_identity.current.account_id}:policy/SNS-prod_red_samis_smart-RW",
    "arn:aws:iam::${data.aws_caller_identity.current.account_id}:policy/SWF-fullaccess",
    "arn:aws:iam::${data.aws_caller_identity.current.account_id}:policy/S3-orcd-sme-feeds-RW",
    "arn:aws:iam::${data.aws_caller_identity.current.account_id}:policy/S3-prod-db-data-RW",
    "arn:aws:iam::${data.aws_caller_identity.current.account_id}:policy/S3-prod-cucumbers-RW"
  ]

  fargate_service_subnets = module.vpc_info.default_private_subnet_ids

  environment_variables = [
    {
      Environment = var.environment
    },
    {
      AWS_REGION = var.aws_region
    },
    {
      FEED_INGESTION_TABLE = var.feed_ingestion_table
    },
    {
      FEED_SENDER_TABLE = var.feed_sender_table
    },
    {
      LOGGLY_URI = var.loggly_uri
    },
    {
      LOGGER_DSN = var.logger_dsn
    },
    {
      MYSQL_ART_RELATIONS_HOST = var.mysql_art_relations_host
    },
    {
      MYSQL_ART_RELATIONS_PORT = var.mysql_art_relations_port
    },
    {
      MYSQL_ART_RELATIONS_USER = var.mysql_art_relations_user
    },
    {
      MYSQL_CONTENT_REVIEW_HOST = var.mysql_content_review_host
    },
    {
      MYSQL_CONTENT_REVIEW_PORT = var.mysql_content_review_port
    },
    {
      MYSQL_CONTENT_REVIEW_USER = var.mysql_content_review_user
    },
    {
      MYSQL_FT_HOST = var.mysql_ft_host
    },
    {
      MYSQL_FT_PORT = var.mysql_ft_port
    },
    {
      MYSQL_FT_USER = var.mysql_ft_user
    },
    {
      MYSQL_OWS_HOST = var.mysql_ows_host
    },
    {
      MYSQL_OWS_PORT = var.mysql_ows_port
    },
    {
      MYSQL_OWS_USER = var.mysql_ows_user
    },
    {
      MYSQL_PRICING_HOST = var.mysql_pricing_host
    },
    {
      MYSQL_PRICING_PORT = var.mysql_pricing_port
    },
    {
      MYSQL_PRICING_USER = var.mysql_pricing_user
    },
    {
      MYSQL_PROMO_PLAYER_HOST = var.mysql_promo_player_host
    },
    {
      MYSQL_PROMO_PLAYER_PORT = var.mysql_promo_player_port
    },
    {
      MYSQL_PROMO_PLAYER_USER = var.mysql_promo_player_user
    },
    {
      MYSQL_RESEARCH_COLLECTIONS_HOST = var.mysql_research_collections_host
    },
    {
      MYSQL_RESEARCH_COLLECTIONS_PORT = var.mysql_research_collections_port
    },
    {
      MYSQL_RESEARCH_COLLECTIONS_USER = var.mysql_research_collections_user
    },
    {
      MYSQL_SG_HOST = var.mysql_sg_host
    },
    {
      MYSQL_SG_PORT = var.mysql_sg_port
    },
    {
      MYSQL_SG_USER = var.mysql_sg_user
    },
    {
      MYSQL_SONY_METADATA_HOST = var.mysql_sony_metadata_host
    },
    {
      MYSQL_SONY_METADATA_PORT = var.mysql_sony_metadata_port
    },
    {
      MYSQL_SONY_METADATA_USER = var.mysql_sony_metadata_user
    },
    {
      MYSQL_SS_HOST = var.mysql_ss_host
    },
    {
      MYSQL_SS_PORT = var.mysql_ss_port
    },
    {
      MYSQL_SS_USER = var.mysql_ss_user
    },
    {
      MYSQL_STATEMENTS_HOST = var.mysql_statements_host
    },
    {
      MYSQL_STATEMENTS_PORT = var.mysql_statements_port
    },
    {
      MYSQL_STATEMENTS_USER = var.mysql_statements_user
    },
    {
      MYSQL_YTOSHIP_HOST = var.mysql_ytoship_host
    },
    {
      MYSQL_YTOSHIP_PORT = var.mysql_ytoship_port
    },
    {
      MYSQL_YTOSHIP_USER = var.mysql_ytoship_user
    },
    {
      PGOPTIONS = var.pgoptions
    },
    {
      RED_SPOTIFY_SAMIS_SNS_TOPIC = var.red_spotify_samis_sns_topic
    },
    {
      REPORTSAR02_ART_RELATIONS_HOST = var.reportsar02_art_relations_host
    },
    {
      REPORTSAR02_ART_RELATIONS_PORT = var.reportsar02_art_relations_port
    },
    {
      REPORTSAR02_ART_RELATIONS_USER = var.reportsar02_art_relations_user
    },
    {
      SF_DB = var.sf_db
    },
    {
      SF_JDBC_JAR = var.sf_jdbc_jar
    },
    {
      SF_SCHEMA = var.sf_schema
    },
    {
      SF_USER = var.sf_user
    },
    {
      SF_WHSE = var.sf_whse
    },
    {
      SNOWFLAKE_ACCOUNT = var.snowflake_account
    },
    {
      SNOWFLAKE_DATABASE = var.snowflake_database
    },
    {
      SNOWFLAKE_ROLE = var.snowflake_role
    },
    {
      SNOWFLAKE_SCHEMA = var.snowflake_schema
    },
    {
      SNOWFLAKE_USER = var.snowflake_user
    },
    {
      SNOWFLAKE_WAREHOUSE = var.snowflake_warehouse
    },
    {
      SNS_TOPIC_AUTO_CLEANUP = var.sns_topic_auto_cleanup
    },
    {
      SPOTIFY_SNOWFLAKE_ACCOUNT = var.spotify_snowflake_account
    },
    {
      SPOTIFY_SNOWFLAKE_ROLE = var.spotify_snowflake_role
    },
    {
      SPOTIFY_SNOWFLAKE_USER = var.spotify_snowflake_user
    },
    {
      SPOTIFY_SNOWFLAKE_WAREHOUSE = var.spotify_snowflake_warehouse
    },
    {
      SQL2SF_STATUS_TABLE = var.sql2sf_status_table
    },
  ]

  secrets = [
    {
      AWS_ACCESS_KEY_ID = "${var.environment}/${var.service_name}/AWS_ACCESS_KEY_ID"
    },
    {
      AWS_SECRET_ACCESS_KEY = "${var.environment}/${var.service_name}/AWS_SECRET_ACCESS_KEY"
    },
    {
      MYSQL_ART_RELATIONS_PASSWORD = "${var.environment}/${var.service_name}/MYSQL_ART_RELATIONS_PASSWORD"
    },
    {
      MYSQL_CONTENT_REVIEW_PASSWORD = "${var.environment}/${var.service_name}/MYSQL_CONTENT_REVIEW_PASSWORD"
    },
    {
      MYSQL_FT_PASSWORD = "${var.environment}/${var.service_name}/MYSQL_FT_PASSWORD"
    },
    {
      MYSQL_OWS_PASSWORD = "${var.environment}/${var.service_name}/MYSQL_OWS_PASSWORD"
    },
    {
      MYSQL_PRICING_PASSWORD = "${var.environment}/${var.service_name}/MYSQL_PRICING_PASSWORD"
    },
    {
      MYSQL_PROMO_PLAYER_PASSWORD = "${var.environment}/${var.service_name}/MYSQL_PROMO_PLAYER_PASSWORD"
    },
    {
      MYSQL_RESEARCH_COLLECTIONS_PASSWORD = "${var.environment}/${var.service_name}/MYSQL_RESEARCH_COLLECTIONS_PASSWORD"
    },
    {
      MYSQL_SG_PASSWORD = "${var.environment}/${var.service_name}/MYSQL_SG_PASSWORD"
    },
    {
      MYSQL_SONY_METADATA_PASSWORD = "${var.environment}/${var.service_name}/MYSQL_SONY_METADATA_PASSWORD"
    },
    {
      MYSQL_SS_PASSWORD = "${var.environment}/${var.service_name}/MYSQL_SS_PASSWORD"
    },
    {
      MYSQL_STATEMENTS_PASSWORD = "${var.environment}/${var.service_name}/MYSQL_STATEMENTS_PASSWORD"
    },
    {
      MYSQL_YTOSHIP_PASSWORD = "${var.environment}/${var.service_name}/MYSQL_YTOSHIP_PASSWORD"
    },
    {
      REPORTSAR02_ART_RELATIONS_PASSWORD = "${var.environment}/${var.service_name}/REPORTSAR02_ART_RELATIONS_PASSWORD"
    },
    {
      SENTRY_DSN = "${var.environment}/${var.service_name}/SENTRY_DSN"
    },
    {
      SF_PASS = "${var.environment}/${var.service_name}/SF_PASS"
    },
    {
      SNOWFLAKE_PASSWORD = "${var.environment}/${var.service_name}/SNOWFLAKE_PASSWORD"
    },
    {
      SPOTIFY_SNOWFLAKE_PASSWORD = "${var.environment}/${var.service_name}/SPOTIFY_SNOWFLAKE_PASSWORD"
    },
    {
      SNOWFLAKE_KEY = "${var.environment}/${var.service_name}/SNOWFLAKE_KEY"
    },
  ]
}

module "fargate_service_dashboard" {
  source                            = "git@github.com:theorchard/terraform-datadog.git//modules/service?ref=6.18.2"
  environment                       = var.environment
  environment_type                  = "fargate"
  application_family                = var.application_family
  service_name                      = var.service_name
  service_4xx_monitor_enabled       = false
  service_5xx_monitor_enabled       = false
  notification_endpoints            = var.monitor_notification_endpoint
  escalation_notification_endpoints = var.monitor_notification_endpoint
  healthy_tasks_monitor_silenced    = true
}
