module "bacon_jobs" {
  for_each = local.bacon_jobs
  source   = "git@github.com:theorchard/terraform-fargate.git//?ref=6.4.1"

  providers = {
    aws.dns = aws.networking
  }

  environment                        = var.environment
  service_name                       = each.key
  aws_region                         = var.aws_region
  application_family                 = var.application_family
  non_ecr_image                      = "086679231553.dkr.ecr.${var.aws_region}.amazonaws.com/${var.service_name}:latest"
  task_type                          = "worker"
  health_check_command               = "pgrep php"
  deployment_minimum_healthy_percent = "100"
  autoscaling_cpu_policy_enabled     = false
  autoscaling_memory_policy_enabled  = false
  desired_task_count                 = each.value.minimum_processes
  minimum_capacity                   = each.value.minimum_processes
  maximum_capacity                   = each.value.maximum_processes
  task_cpu                           = each.value.task_cpu
  task_memory                        = each.value.task_memory
  task_protection_policy_enabled     = true
  container_port                     = 8080
  health_check_grace_period_seconds  = 300
  container_start_period_seconds     = 300
  target_deregistration_delay        = 300
  splitio_enabled                    = false
  ows_machine_to_machine_enabled     = false
  vpc_id                             = module.vpc_info.vpc_id
  fargate_service_subnets            = module.vpc_info.default_private_subnet_ids

  iam_managed_policy_attachments = [
    aws_iam_policy.bacon_sqs_runtime_policy.arn,
  ]

  execution_role_iam_managed_policy_attachments = [
    aws_iam_policy.bacon_shared_secrets_policy.arn,
  ]

  environment_variables = [
    {
      ENVIRONMENT = var.environment
    },
    {
      DD_TRACE_ANALYTICS_ENABLED = "true"
    },
    {
      DD_TRACE_APP_NAME = each.value.name
    },
    {
      DD_TRACE_GLOBAL_TAGS = "env:${var.environment}"
    },
    {
      PATH_FROM_REPO_ROOT_OF_PHP_SCRIPT_TO_RUN = each.value["runpath"]
    },
    {
      PHP_DISPLAY_ERRORS = "false"
    },
    {
      PHP_MEMORY_LIMIT = "1536M"
    },
    {
      LC_ALL = "en_US.UTF-8"
    },
    {
      LANG = "en_US.UTF-8"
    },
    {
      LANGUAGE = "en_US.UTF-8"
    },
    {
      OAUTH_APPROVAL_PROMPT = "auto"
    },
    {
      OAUTH_ACCESS_TYPE = "offline"
    },
    {
      OAUTH_REDIRECT_URL = "http://localhost:8080/YoutubeAuthManually.php"
    },
    {
      OAUTH_SCOPES = "https://www.googleapis.com/auth/youtube,https://www.googleapis.com/auth/youtube.readonly,https://www.googleapis.com/auth/youtube.upload,https://www.googleapis.com/auth/youtubepartner"
    },
    {
      YOUTUBE_RULE_ACTION = "monetize"
    },
    {
      YOUTUBE_RULE_REQUIRED_TERRITORIES_TYPE = "exclude"
    },
    {
      YOUTUBE_RULE_CONTENT_MATCH_TYPE = "audiovisual"
    },
    {
      YOUTUBE_COUNTRY_CS = "RS"
    },
    {
      YOUTUBE_COUNTRY_AN = "CW,SX"
    },
    {
      VECTORAPI_BASE_URL = var.vectorapi_base_url
    },
    {
      VECTORAPI_CALLBACK_URL = var.vectorapi_callback_url
    },
    {
      VECTORAPI_USER_ID = "844"
    },
    {
      VECTORAPI_USER_TYPE = "oa"
    },
    {
      DB_HOST = var.db_host
    },
    {
      DB_NAME = "art_relations"
    },
    {
      DB_USER = var.service_name
    },
    {
      DB_PORT = "3306"
    },
    {
      DB_DRIVER = "mysql"
    },
    {
      DB_CHARSET = "utf8mb4"
    },
    {
      SENTRY_DSN = module.sentry_project.sentry_key_dsn_public_output
    },
    {
      MEMCACHE_HOST = module.elasticache.memcached_cluster_address
    },
    {
      MEMCACHE_PORT = "11211"
    },
    {
      MEMCACHE_LIFETIME = "1800"
    },
    {
      QUEUE_ADAPTER = "SQS"
    },
    {
      QUEUE_REGION = var.aws_region
    },
    {
      QUEUE_DEFAULTERROR_NAME = module.bacon_queues["bacon_defaultErrorQ"].queue_name
    },
    {
      QUEUE_ACTIVITIES_NAME = module.bacon_queues["bacon_activitiesQ"].queue_name
    },
    {
      QUEUE_VIDEO_NAME = module.bacon_queues["bacon_videoQ"].queue_name
    },
    {
      QUEUE_TRACKS_NAME = module.bacon_queues["bacon_tracksQ"].queue_name
    },
    {
      QUEUE_ASSET_NAME = module.bacon_queues["bacon_assetQ"].queue_name
    },
    {
      QUEUE_OWNERSHIP_NAME = module.bacon_queues["bacon_ownershipQ"].queue_name
    },
    {
      QUEUE_CLAIMS_NAME = module.bacon_queues["bacon_claimsQ"].queue_name
    },
    {
      QUEUE_ASSETMATCH_NAME = module.bacon_queues["bacon_assetmatchQ"].queue_name
    },
    {
      QUEUE_REFERENCES_NAME = module.bacon_queues["bacon_referencesQ"].queue_name
    },
    {
      QUEUE_VISIBILITY_TIMEOUT = "20"
    },
    {
      QUEUE_MESSAGE_RETENTION_PERIOD = "1209600"
    },
    {
      QUEUE_MSG_VISIBILITY_TIMEOUT = "20"
    },
    {
      QUEUE_MAX_NUMBER_OF_MESSAGES = "1"
    },
    {
      QUEUE_WAIT_TIME_SECONDS = "10"
    },
    {
      QUEUE_MAX_RECEIVE_COUNT = "10"
    },
    {
      QUEUE_DEAD_LETTER_TARGET_ARN = module.bacon_queues["bacon_defaultErrorQ"].queue_arn
    },
    {
      CONSUMER_LOCK_SAFETY_SEC = "30"
    },
    {
      CONSUMER_CACHE_RETRY_THRESHOLD_SEC = "6"
    },
    {
      CONSUMER_MAX_LOCK_TIME_SEC = "1200"
    },
    {
      CONSUMER_ACTIVITIES_FREE_WAIT_SEC = "600"
    },
    {
      CONSUMER_VIDEO_FREE_WAIT_SEC = "600"
    },
    {
      CONSUMER_TRACK_FREE_WAIT_SEC = "600"
    },
    {
      CONSUMER_ASSET_FREE_WAIT_SEC = "600"
    },
    {
      CONSUMER_OWNERSHIP_FREE_WAIT_SEC = "600"
    },
    {
      CONSUMER_CLAIMS_FREE_WAIT_SEC = "600"
    },
    {
      CONSUMER_ASSETMATCH_FREE_WAIT_SEC = "600"
    },
    {
      CONSUMER_REFERENCES_FREE_WAIT_SEC = "600"
    },
    {
      ACTIVITIES_DURATION_BETWEEN_RUNS = "3 min"
    },
    {
      ACTIVITIES_HOW_FAR_BACK_TO_CHECK = "5 min"
    },
    {
      ACTIVITIES_RUN_TIME_DIFF_MAIL = "3600"
    },
    {
      ACTIVITIES_RUN_ONLY_FROM_WHITELIST = var.activities_run_only_from_whitelist
    },
    {
      ACTIVITIES_CHANNEL_WHITELIST = var.activities_channel_whitelist
    },
    {
      LOG_LEVEL = var.log_level
    },
  ]

  secrets = [
    {
      OAUTH_CLIENT_ID = "${var.environment}/${var.service_name}/OAUTH_CLIENT_ID"
    },
    {
      OAUTH_CLIENT_SECRET = "${var.environment}/${var.service_name}/OAUTH_CLIENT_SECRET"
    },
    {
      OAUTH_DEVELOPER_KEY = "${var.environment}/${var.service_name}/OAUTH_DEVELOPER_KEY"
    },
    {
      VECTORAPI_CLIENT_ID = "${var.environment}/${var.service_name}/VECTORAPI_CLIENT_ID"
    },
    {
      VECTORAPI_CLIENT_SECRET = "${var.environment}/${var.service_name}/VECTORAPI_CLIENT_SECRET"
    },
    {
      DB_PASS = "${var.environment}/${var.service_name}/DB_PASS"
    },
  ]
}

