data "aws_ssm_parameter" "worker_queue_name" {
  name = "/common/sqs/worker/queue-url"
}
locals {
  env_config = {
    aws_account = "923929101992"
    env         = "dev"

    humand_vpc_id        = "vpc-0ca675a5ccd7a6bcf"
    public_cluster_name  = "public-dev-services"
    private_cluster_name = "private-dev-services"
    private_subnet_ids   = ["subnet-0a6d5983ddc0f655a", "subnet-029b78401cc14b030", "subnet-09bc8422006026583"]
    public_subnet_ids    = ["subnet-05d9f721313643517", "subnet-01a35bac5a29d9b6f", "subnet-0f3d8cb4eb8cc48f9"]
    cidr_block           = "10.100.0.0/16"
  }
  max_concurrent_tasks = 2
}


module "messages" {
  source = "../../modules/messages"
}

module "humand-app" {
  source = "../../modules/services/app"

  time_tracking_face_assignments_queue_arn = module.cross_services.time_tracking_face_assignments_queue_arn
  time_tracking_face_assignments_dlq_arn   = module.cross_services.time_tracking_face_assignments_dlq_arn

  env_config            = local.env_config
  environment_overrides = local.environment_overrides
  docker_image          = var.docker_image

  ingress_lb_tg = "arn:aws:elasticloadbalancing:us-east-1:923929101992:targetgroup/humand-main-app-tg/72469fee7615e042"

  secret_overrides = local.secret_overrides

  spot_ratio = 0

  sns_topic_arns = [module.messages.course_events_topic_arn, module.messages.px_workflow_events_topic_arn, module.cross_services.instance_duplication_sns_topic_arn]

  depends_on = [module.messages]

  enable_autoscaling             = true
  autoscaling_min_capacity       = 2
  autoscaling_max_capacity       = 2
  cpu_target_utilization_percent = 50
  scale_in_cooldown              = 300
  scale_out_cooldown             = 300
}

module "humand-backoffice" {
  source = "../../modules/services/backoffice"

  time_tracking_face_assignments_queue_arn = module.cross_services.time_tracking_face_assignments_queue_arn
  time_tracking_face_assignments_dlq_arn   = module.cross_services.time_tracking_face_assignments_dlq_arn

  env_config            = local.env_config
  environment_overrides = local.environment_overrides
  docker_image          = var.docker_image

  instance_duplication_bucket        = module.cross_services.instance_duplication_s3_bucket_name
  instance_duplication_sns_topic_arn = module.cross_services.instance_duplication_sns_topic_arn

  ingress_lb_tg = "arn:aws:elasticloadbalancing:us-east-1:923929101992:targetgroup/humand-main-backoffice-tg/cfb0a7a592db75b8"

  secret_overrides = local.secret_overrides
  spot_ratio       = 0

  sns_topic_arns = [module.messages.course_events_topic_arn, module.messages.px_workflow_events_topic_arn, module.cross_services.instance_duplication_sns_topic_arn]

  depends_on                     = [module.messages]
  enable_autoscaling             = true
  autoscaling_min_capacity       = 2
  autoscaling_max_capacity       = 2
  cpu_target_utilization_percent = 50
  scale_in_cooldown              = 300
  scale_out_cooldown             = 300
}

module "humand-public-api" {
  source = "../../modules/services/public-api"

  env_config            = local.env_config
  environment_overrides = local.environment_overrides
  docker_image          = var.docker_image

  ingress_lb_tg = "arn:aws:elasticloadbalancing:us-east-1:923929101992:targetgroup/humand-main-public-api-tg/4ce6253bb96a558d"

  secret_overrides = local.secret_overrides

  spot_ratio = 0

  sns_topic_arns = [module.messages.course_events_topic_arn, module.messages.px_workflow_events_topic_arn, module.cross_services.instance_duplication_sns_topic_arn]

  depends_on                     = [module.messages]
  enable_autoscaling             = true
  autoscaling_min_capacity       = 2
  autoscaling_max_capacity       = 2
  cpu_target_utilization_percent = 50
  scale_in_cooldown              = 300
  scale_out_cooldown             = 300
}

module "humand-grpc" {
  source = "../../modules/services/grpc"

  time_tracking_face_assignments_queue_arn = module.cross_services.time_tracking_face_assignments_queue_arn
  time_tracking_face_assignments_dlq_arn   = module.cross_services.time_tracking_face_assignments_dlq_arn

  env_config            = local.env_config
  environment_overrides = local.environment_overrides
  docker_image          = var.docker_image

  ingress_lb_tg = "arn:aws:elasticloadbalancing:us-east-1:923929101992:targetgroup/humand-main-grpc-tg/fc9275e2378397c7"

  secret_overrides = local.secret_overrides
  spot_ratio       = 0

  enable_autoscaling             = true
  autoscaling_min_capacity       = 2
  autoscaling_max_capacity       = 2
  cpu_target_utilization_percent = 70
  scale_in_cooldown              = 300
  scale_out_cooldown             = 300

  depends_on = [module.messages]
}

module "humand-worker" {
  source = "../../modules/services/worker"

  time_tracking_face_assignments_queue_arn = module.cross_services.time_tracking_face_assignments_queue_arn
  time_tracking_face_assignments_dlq_arn   = module.cross_services.time_tracking_face_assignments_dlq_arn

  env_config            = local.env_config
  environment_overrides = local.environment_overrides
  docker_image          = var.docker_image

  instance_duplication_queue_url = module.cross_services.instance_duplication_completion_queue_url
  instance_duplication_queue_arn = module.cross_services.instance_duplication_completion_queue_arn

  file_assets_scan_queue_url               = module.cross_services.file_assets_scan_queue_url
  file_assets_scan_dlq_url                 = module.cross_services.file_assets_scan_dlq_url
  file_assets_scan_completed_sns_topic_arn = module.cross_services.file_assets_scan_completed_sns_topic_arn
  file_assets_scan_queue_arn               = module.cross_services.file_assets_scan_queue_arn
  file_assets_scan_dlq_arn                 = module.cross_services.file_assets_scan_dlq_arn

  secret_overrides = local.secret_overrides
  spot_ratio       = 0
  ingress_lb_tg    = "arn:aws:elasticloadbalancing:us-east-1:923929101992:targetgroup/humand-worker-tg/f2800d332239c2a6"

  enable_autoscaling           = true
  autoscaling_min_capacity     = 1
  autoscaling_max_capacity     = 2
  sqs_queue_url                = data.aws_ssm_parameter.worker_queue_name.value
  sqs_messages_per_task_target = local.max_concurrent_tasks
  scale_in_cooldown            = 300 # 5 minutes
  scale_out_cooldown           = 120 # 2 minutes

  depends_on = [module.messages]
}

module "humand-event-handler" {
  source = "../../modules/services/event-handler"

  env_config            = local.env_config
  environment_overrides = local.environment_overrides
  docker_image          = var.docker_image

  secret_overrides = local.secret_overrides
  spot_ratio       = 0
  ingress_lb_tg    = "arn:aws:elasticloadbalancing:us-east-1:923929101992:targetgroup/humand-event-handler-tg/8eed6cf410a56490"

  time_tracking_categorized_hours_queue_arn = module.cross_services.time_tracking_categorized_hours_queue_arn
  time_tracking_categorized_hours_dlq_arn   = module.cross_services.time_tracking_categorized_hours_dlq_arn
  time_tracking_face_assignments_queue_arn  = module.cross_services.time_tracking_face_assignments_queue_arn
  time_tracking_face_assignments_dlq_arn    = module.cross_services.time_tracking_face_assignments_dlq_arn
  prode_audiences_queue_arn                 = module.cross_services.prode_audiences_queue_arn
  prode_audiences_dlq_arn                   = module.cross_services.prode_audiences_dlq_arn

  depends_on = [module.messages]
}

module "humand-super-admin" {
  source = "../../modules/services/super-admin"

  env_config            = local.env_config
  environment_overrides = local.environment_overrides
  docker_image          = var.docker_image

  lb_host_condition = "api.dev.humand.co"

  secret_overrides = local.secret_overrides

  spot_ratio = 0

  enable_autoscaling             = true
  autoscaling_min_capacity       = 1
  autoscaling_max_capacity       = 2
  cpu_target_utilization_percent = 50
  scale_in_cooldown              = 300
  scale_out_cooldown             = 300

  depends_on = [module.messages]
}

module "monolith-cdc" {
  source = "../../modules/services/monolith-cdc"

  env_config            = local.env_config
  environment_overrides = local.environment_overrides
  docker_image          = var.docker_image

  secret_overrides = local.secret_overrides
  spot_ratio       = 0

  lb_host_condition = "api.dev.humand.co"

  kafka_groups_group_id              = aws_ssm_parameter.monolith_cdc_kafka_groups_group_id.value
  kafka_departments_group_id         = aws_ssm_parameter.monolith_cdc_kafka_departments_group_id.value
  kafka_user_gatherings_group_id     = aws_ssm_parameter.monolith_cdc_kafka_user_gatherings_group_id.value
  kafka_job_positions_group_id       = aws_ssm_parameter.monolith_cdc_kafka_job_positions_group_id.value
  kafka_acknowledgements_group_id    = aws_ssm_parameter.monolith_cdc_kafka_acknowledgements_group_id.value
  kafka_firebase_group_id            = aws_ssm_parameter.monolith_cdc_kafka_firebase_group_id.value
  kafka_performance_reviews_group_id = aws_ssm_parameter.monolith_cdc_kafka_performance_reviews_group_id.value
  kafka_goals_group_id               = aws_ssm_parameter.monolith_cdc_kafka_goals_group_id.value
  kafka_regions_group_id             = aws_ssm_parameter.monolith_cdc_kafka_regions_group_id.value
  kafka_time_tracking_group_id       = aws_ssm_parameter.monolith_cdc_kafka_time_tracking_group_id.value
  kafka_events_group_id              = aws_ssm_parameter.monolith_cdc_kafka_events_group_id.value
  kafka_livestream_group_id          = aws_ssm_parameter.monolith_cdc_kafka_livestream_group_id.value
  kafka_feed_group_id                = aws_ssm_parameter.monolith_cdc_kafka_feed_group_id.value
  kafka_marketplace_group_id         = aws_ssm_parameter.monolith_cdc_kafka_marketplace_group_id.value
  kafka_users_search_group_id        = aws_ssm_parameter.monolith_cdc_kafka_users_search_group_id.value

  depends_on = [module.debezium_connector]
}
module "debezium_connector" {
  source = "../../modules/debezium_connector"

  database_name        = "humand"
  database_secret_arn  = "arn:aws:secretsmanager:us-east-1:923929101992:secret:cluster-humand-aurora-dev-oRDPkp"
  database_secret_name = "cluster-humand-aurora-dev"
  mcu_count            = 1
  worker_count         = 1
  tables_data = [
    "public.Users",
    "public.UserCapabilities",
    "public.Segmentations",
    "public.SegmentationItems",
    "public.SegmentationGroups",
    "public.InstanceCapabilities",
    "public.Instances",
    "public.UserSegmentationItems",
    "public.FileAssets",
    "public.FirebaseTokens",
    "public.Departments",
    "public.JobPositions",
    "public.Capabilities",
    "public.LimitedAvailableCapabilities",
    "public.Groups",
    "public.links",
    "public.CommunityFeatures",
    "public.FeatureFlags",
    "public.DepartmentMembers",
    "public.JobPositionMembers",
    "public.UserStatusDates",
    "public.TermsAndConditions",
    "public.TermsAndConditionsAccepted",
    "public.InstanceSSODomains",
    "public.InstanceRelationshipsInProfile",
    "public.ServiceConfigs",
    "public.AudienceInstanceUsers",
    "public.Sessions",
    "public.InstanceSamlConfig",
    "public.GroupMembers",
    "public.UserReviewers",
    "public.UserBosses"
  ]
  tasks_max = 1
  tags = {
    Name = "monolith-debezium-connector"
  }
  cloudwatch_retention_days = 14
  msk_cluster_name          = "humand-aws-msk-cluster"
  msk_configuration_name    = "humand-aws-msk-config"
  debezium_plugin_name      = "humand-aws-msk-plugin-debezium-postgresql-with-secrets"
  private_subnet_ids        = local.env_config.private_subnet_ids
  humand_vpc_id             = local.env_config.humand_vpc_id
  humand_vpc_cidr_block     = local.env_config.cidr_block
  humand_sec_vpc_cidr_block = "10.103.0.0/16"
  env                       = local.env_config.env
}

module "cross_services" {
  source                   = "../../modules/cross_services"
  humand_multimedia_bucket = "hu-multimedia-dev"
  env                      = local.env_config.env
}

module "guard_duty" {
  source                   = "../../modules/guard_duty"
  humand_multimedia_bucket = "hu-multimedia-dev"
  env                      = local.env_config.env
}
