provider "aws" {
  region = var.aws_region
}

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

data "aws_secretsmanager_secret" "rds_master_username" {
  name = "${var.Environment}/${var.service_name}/rds_master_username"
}

data "aws_secretsmanager_secret_version" "rds_master_username" {
  secret_id = data.aws_secretsmanager_secret.rds_master_username.id
}

data "aws_secretsmanager_secret" "rds_master_password" {
  name = "${var.Environment}/${var.service_name}/rds_master_password"
}

data "aws_secretsmanager_secret_version" "rds_master_password" {
  secret_id = data.aws_secretsmanager_secret.rds_master_password.id
}

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

  environment                         = var.Environment
  service_name                        = var.service_name
  rds_db_subnet_group_name            = "prod-orchard-private-subnet-group"
  rds_cluster_instance_class          = "db.r5.large"
  rds_vpc_security_group_ids          = ["sg-21f1ed44"]
  rds_cluster_instance_count          = "1"
  rds_master_username                 = data.aws_secretsmanager_secret_version.rds_master_username.secret_string
  rds_master_password                 = data.aws_secretsmanager_secret_version.rds_master_password.secret_string
  rds_availability_zones              = ["us-east-1a", "us-east-1c"]
  rds_db_cluster_parameter_group_name = "mysql57sync"
}

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

  environment_name = var.Environment
  service_name     = var.service_name
}

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

  environment                              = var.Environment
  service_name                             = var.service_name
  aws_region                               = var.aws_region
  commit_sha                               = "latest"
  container_port                           = "8080"
  task_type                                = "web_service"
  desired_task_count                       = 2
  task_cpu                                 = 256
  task_memory                              = 512
  maximum_capacity                         = 2
  minimum_capacity                         = 1
  scale_up_adjustment                      = 1
  scale_down_adjustment                    = -1
  health_check_path                        = "/hello/"
  route53_zone_id                          = "Z2RSKZ9M7TJ9Z"
  load_balancer_access_logs_s3_bucket_name = "orch-elb-logs"
  vpc_id                                   = "vpc-7f0e841a"
  datadog_function_destination_arn         = "arn:aws:lambda:us-east-1:437795906767:function:DatadogLambdaFunction"
  https_listener_certificate_id            = "a76e4883-28aa-4062-a4cc-c06b8012ae28"

  iam_managed_policy_attachments = [
    "arn:aws:iam::437795906767:policy/Dynamo-${var.Environment}-${var.service_name}-owsrequest",
    module.buckets.output_bucket_readonly_policy_arn,
    module.buckets.ows_podcast_browser_upload_assume_role_policy_arn,
  ]

  fargate_service_subnets = [
    "subnet-067a6b45b079d7296",
    "subnet-043d235081c966332",
  ]

  load_balancer_subnets = [
    "subnet-067a6b45b079d7296",
    "subnet-043d235081c966332",
  ]

  environment_variables = [
    {
      Environment = var.Environment
    },
    {
      DATADOG_ENV = "${var.Environment}-${var.service_name}"
    },
    {
      DATADOG_TRACE_DEBUG = "true"
    },
    {
      DD_LOGS_INJECTION = "true"
    },
    {
      LOGGER_DSN = "https://${var.Environment}-fluentd-applications.theorchard.io:8888/application"
    },
    {
      UPLOAD_ROLE_ARN = module.buckets.ows_podcast_browser_upload_role_arn
    },
    {
      INPUT_ASSETS_BUCKET_NAME = module.buckets.input_bucket_name
    },
    {
      OUTPUT_ASSETS_BUCKET_NAME = module.buckets.output_bucket_name
    },
    {
      OUTPUT_CDN_BASE_URL = var.output_assets_domain
    },
    {
      AUTH0_CLIENT_ID = "5qxOmkhLcy6YcfT7jiXmbLjoZ9GwJMcr"
    },
  ]
}

module "fargate_service_dashboard" {
  source           = "git@github.com:theorchard/terraform-datadog.git//modules/service"
  environment      = var.Environment
  environment_type = "fargate"
  service_name     = var.service_name
}

module "buckets" {
  source = "../modules/buckets"

  environment        = var.Environment
  input_bucket_cors  = var.input_assets_bucket_cors
  output_bucket_cors = var.output_assets_bucket_cors

  output_assets_cdn_certificate_arn = var.output_assets_cdn_certificate_arn
  output_assets_domain              = var.output_assets_domain

  fargate_task_role     = module.ows_podcast_fargate_environment.fargate_task_iam_role_arn
  logging_target_bucket = ["prod-orcd-s3-logs"]
}

module "lambdas" {
  source = "../modules/lambdas"

  environment                          = var.Environment
  sns_general_topic_name               = "podcast_asset_general_status"
  sns_encoding_status_topic_name       = "podcast_asset_encoding_status"
  vpc_security_group_ids               = var.vpc_security_group_ids
  vpc_subnet_ids                       = var.vpc_subnet_ids
  elastic_transcoder_pipeline_id       = module.elastic_transcoder.pipeline_id
  image_previews_bucket                = module.buckets.output_bucket_name
  output_assets_bucket                 = module.buckets.output_bucket_name
  image_encoding_lambda_memory_size    = var.image_encoding_lambda_memory_size
  audio_waveform_lambda_execution_time = var.audio_waveform_lambda_execution_time
  lambda_concurrent_executions         = 2
  datadog_enabled                      = false

  sentry_dsn_acknowledge      = "https://14bdbf3ab9ad4e6b835b89b8d0c50a78@sentry.io/1795544"
  sentry_dsn_encoding_route   = "https://cf28c1de84664266992438d70c190d58@sentry.io/1795547"
  sentry_dsn_image_validation = "https://2ac09b3452ef494cab4ace12c8e98c6f@sentry.io/1795549"
  sentry_dsn_image_encoding   = "https://dd6eff322b3f462282dd20420733ac1c@sentry.io/1795560"
  sentry_dsn_audio_validation = "https://be30234f3ed9401bbac571c9dcc82612@sentry.io/1795565"
  sentry_dsn_audio_waveform   = "https://415a6b04c4f543a68c3059639ab50133@sentry.io/1795568"
  sentry_dsn_general_status   = "https://80a6ca16cfd34ea4b8975a43797f877e@sentry.io/1795571"
  sentry_dsn_final_status     = "https://ac90130924ad4488ad51e09a32c6b712@sentry.io/1795578"
  sentry_dsn_error_reporting  = "https://252f2aff08544e44bb2e69bdbe1f543b@sentry.io/1796641"
}

module "elastic_transcoder" {
  source = "../modules/elastic_transcoder"

  environment            = var.Environment
  input_bucket_arn       = module.buckets.input_bucket_arn
  output_bucket_arn      = module.buckets.output_bucket_arn
  input_bucket_name      = module.buckets.input_bucket_name
  output_bucket_name     = module.buckets.output_bucket_name
  encoding_sns_topic_arn = module.lambdas.sns_encoding_status_topic_arn
}

module "state_machine" {
  source = "../modules/transcoding_state_machine"

  environment                 = var.Environment
  region                      = var.aws_region
  acknowledge_lambda_arn      = module.lambdas.acknowledge_lambda_arn
  encoding_route_lambda_arn   = module.lambdas.encoding_route_lambda_arn
  audio_validation_lambda_arn = module.lambdas.audio_validation_lambda_arn
  audio_waveform_lambda_arn   = module.lambdas.audio_waveform_lambda_arn
  image_validation_lambda_arn = module.lambdas.image_validation_lambda_arn
  image_encoding_lambda_arn   = module.lambdas.image_encoding_lambda_arn
  error_reporting_lambda_arn  = module.lambdas.error_reporting_lambda_arn
  input_assets_bucket         = module.buckets.input_bucket_name
}

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

  environment                              = "${var.Environment}"
  service_name                             = "podcast-gateway"
  aws_region                               = "${var.aws_region}"
  commit_sha                               = "latest"
  container_port                           = "3000"
  task_type                                = "web_service"
  desired_task_count                       = 1
  task_cpu                                 = 1024
  task_memory                              = 2048
  maximum_capacity                         = 4
  minimum_capacity                         = 1
  datadog_enabled                          = true
  route53_zone_id                          = "Z2RSKZ9M7TJ9Z"
  load_balancer_access_logs_s3_bucket_name = "orch-elb-logs"
  vpc_id                                   = "vpc-7f0e841a"
  datadog_function_destination_arn         = "arn:aws:lambda:us-east-1:437795906767:function:DatadogLambdaFunction"
  https_listener_certificate_id            = "a76e4883-28aa-4062-a4cc-c06b8012ae28"

  environment_variables = [
    {
      Environment = var.Environment
    },
    {
      AUTH0_DOMAIN = var.auth0_domain
    },
    {
      AUTH0_CLIENT_ID = var.auth0_client_id
    },
    {
      AUTH0_APP_NAME = var.auth0_app_name
    },
    {
      AUTH0_AUDIENCE = var.auth0_audience
    },
    {
      CDN_URL = var.cdn_url
    },
    {
      OWS_GRASS_URL = var.ows_grass_url
    },
    /*
TODO: To be moved from here to prod in POD-111

    {
      AUTH0_DOMAIN = "orchard.auth0.com"
    },
    {
      AUTH0_CLIENT_ID = "mIVLZP5o1M3SoJ615xp0JpJpBpFD3qwJ"
    },
    {
      AUTH0_APP_NAME = "podcast-login"
    },
    {
      AUTH0_AUDIENCE = "https://workstation.theorchard.com/api"
    },
    {
      CDN_URL = "https://cdn.theorchard.io/frontend-podcast"
    },
    {
      OWS_GRASS_URL = "https://ows-grass.theorchard.io"
    },
    {
      FRONTEND_SHA = ""
    },
*/
  ]

  fargate_service_subnets = [
    "subnet-067a6b45b079d7296",
    "subnet-043d235081c966332",
  ]

  load_balancer_subnets = [
    "subnet-067a6b45b079d7296",
    "subnet-043d235081c966332",
  ]
}
