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 = var.aws_region

  default_tags {
    tags = module.default_tags.tags
  }
}

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

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

  environment = var.environment
}

data "aws_caller_identity" "current" {}

data "aws_rds_cluster" "art_relations" {
  cluster_identifier = format("%s-art-relations", var.environment)
}

data "aws_rds_cluster" "direct_delivery" {
  cluster_identifier = format("%s-direct-delivery-cluster", var.environment)
}


data "aws_elasticache_replication_group" "vector_cache" {
  replication_group_id = format("%s-vector-phys-loc-13", var.environment)
}

data "aws_secretsmanager_secret" "ar_db_password" {
  name = format("%s/vector-encoder/AR_DB_PASSWORD", var.environment)
}

data "aws_secretsmanager_secret" "dd_db_eo_password" {
  name = format("%s/vector-encoder/DD_DB_EO_PASSWORD", var.environment)
}

data "aws_secretsmanager_secret" "dd_db_rw_password" {
  name = format("%s/vector-encoder/DD_DB_RW_PASSWORD", var.environment)
}

data "aws_secretsmanager_secret" "dd_db_ro_password" {
  name = format("%s/vector-encoder/DD_DB_RO_PASSWORD", var.environment)
}

data "aws_secretsmanager_secret" "aws_key_id" {
  name = format("%s/vector-encoder/AWS_KEY_ID", var.environment)
}

data "aws_secretsmanager_secret" "aws_secret_key" {
  name = format("%s/vector-encoder/AWS_SECRET_KEY", var.environment)
}

data "aws_iam_policy" "kms_policy" {
  name = format("KMS-%s-vector-encoder-policy", var.environment)
}

module "vector_cron_worker_sentry_project" {
  source             = "git@github.com:theorchard/terraform-sentry.git//?ref=5.1.0"
  service_name       = var.service_name
  environment        = var.environment
  teams              = [var.environment]
  application_family = var.application_family
  platform           = "php"
}

# Vector Cron Worker
module "obtain_ringtone_encoding_orders_fargate_environment" {
  source = "git@github.com:theorchard/terraform-fargate.git//?ref=6.5.0"

  providers = {
    aws.dns = aws
  }

  environment                           = var.environment
  service_name                          = var.service_name
  non_ecr_image                         = format("086679231553.dkr.ecr.%s.amazonaws.com/vector-worker:latest", var.aws_region)
  vpc_id                                = module.vpc_info.vpc_id
  application_family                    = var.application_family
  secrets_manager_service_name          = "vector-encoder"
  aws_region                            = var.aws_region
  commit_sha                            = "latest"
  task_type                             = "worker"
  health_check_command                  = "pgrep php"
  desired_task_count                    = 0
  task_cpu                              = 512
  task_memory                           = 1024
  minimum_capacity                      = 0
  maximum_capacity                      = 0
  task_protection_policy_enabled        = true
  splitio_enabled                       = false
  ows_machine_to_machine_enabled        = false
  autoscaling_cpu_policy_enabled        = false
  autoscaling_memory_policy_enabled     = false
  external_autoscaling_policy_enabled   = false
  stopped_task_monitoring_enabled             = true
  fargate_spot_capacity_provider_weight       = 100
  task_placement_failure_alert_enabled        = true
  deployment_circuit_breaker_enabled          = true
  deployment_circuit_breaker_rollback_enabled = true
  cloudwatch_event_enabled                    = true
  cloudwatch_event_schedule                   = "rate(4 hours)"
  iam_managed_policy_attachments = [
    data.aws_iam_policy.kms_policy.arn,
  ]

  fargate_service_subnets = module.vpc_info.default_private_subnet_ids

  environment_variables = [
    {
      Environment = var.environment
    },
    {
      PHP_ENTRYPOINT = "scripts/obtain_encoding_orders.php"
    },
    {
      LOCAL_SOURCE = "/var/app/source/"
    },
    {
      SERVICE_NAME = var.service_name
    },
    {
      LOG_LEVEL = "7"
    },
    {
      STDOUT = "1"
    },
    {
      SENTRY_DSN = module.vector_cron_worker_sentry_project.sentry_key_dsn_public_output
    },
    {
      AR_DB_HOST = data.aws_rds_cluster.art_relations.endpoint
    },
    {
      AR_DB_USERNAME = "dd_user"
    },
    {
      DD_DB_HOST = data.aws_rds_cluster.direct_delivery.endpoint
    },
    {
      DD_DB_EO_USERNAME = "vector_execonly"
    },
    {
      DD_DB_RW_USERNAME = "vector_rw"
    },
    {
      DD_DB_RO_USERNAME = "vector_ro"
    },
    {
      S3_XML_BACKUP_BUCKET = format("%s-vector-audit", var.environment)
    },
    {
      S3_XML_BACKUP_PATH = "/metadata"
    },
    {
      CACHE_HOST = data.aws_elasticache_replication_group.vector_cache.primary_endpoint_address
    },
    {
      ENCODING_QUEUE_NAME_PATTERN = format("%s-encoding{encoder-id}_e{priority(7)}_d{dms-priority(7)}", var.environment)
    },
    {
      DELIVERY_QUEUE_NAME_PATTERN = format("%s-delivery{encoder-id}_e{priority(7)}_d{dms-priority(7)}", var.environment)
    },
  ]

  # TODO: create dedicated secrets prod/${var.service_name}/AR_DB_PASSWORD and
  # prod/${var.service_name}/DD_DB_EO_PASSWORD; currently borrowing from vector-encoder
  secrets = [
    {
      AR_DB_PASSWORD = data.aws_secretsmanager_secret.ar_db_password.name
    },
    {
      DD_DB_EO_PASSWORD = data.aws_secretsmanager_secret.dd_db_eo_password.name
    },
    {
      DD_DB_RW_PASSWORD = data.aws_secretsmanager_secret.dd_db_rw_password.name
    },
    {
      DD_DB_RO_PASSWORD = data.aws_secretsmanager_secret.dd_db_ro_password.name
    },
    {
      AWS_KEY_ID = data.aws_secretsmanager_secret.aws_key_id.name
    },
    {
      AWS_SECRET_KEY = data.aws_secretsmanager_secret.aws_secret_key.name
    },
  ]
}
