# Main S3 buckets (available for external clients)
module "s3_sme-data-archive" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.env_prefix}-sme-data-archive"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/sme-data-archive/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 190
  standard_ia_days   = 30

  custom_expiration = {
    "appreciationengine/activityfeed/"    = 14
    "appreciationengine/membersextended/" = 14
    "appreciationengine/memberslogin/"    = 14
    #"appreciationengine/membersvisittotals_daily/" = 14
  }

  common_tags = merge(
    local.common_tags,
    {
      project                  = "SLZ Data",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_SLZD_S3"
    }
  )
}

module "s3_sme-data-decompressed" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.env_prefix}-sme-data-decompressed"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/sme-data-decompressed/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 30

  custom_expiration = {
    "appreciationengine/activityfeed/"    = 14
    "appreciationengine/membersextended/" = 14
    "appreciationengine/memberslogin/"    = 14
    #"appreciationengine/membersvisittotals_daily/" = 14
    "appreciationengine/request_to_forget/" = 14 // DAE-11377
    "salesforce_marketing_cloud/"           = 5
  }

  common_tags = merge(
    local.common_tags,
    {
      project                  = "SLZ Data",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_SLZD_S3"
    }
  )
}

# Other s3 buckets
module "s3_sme-data-corrupted" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-sme-data-corrupted"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/sme-data-corrupted/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 7
  common_tags = merge(
    local.common_tags,
    {
      project                  = "SLZ Data",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_SLZD_S3"
    }
  )
}

module "s3_config" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-configs"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/configs/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Common"
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_CMN_S3"
    }
  )
}

module "s3_lambda_artifacts" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-lambda-artifacts"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/lambda_artifacts/"
  default_policy     = true
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_S3"
    }
  )
}

module "s3_apps_etl_output" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-apps-etl-output"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/apps-etl-output/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Apps ETL",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_AETL_S3"
    }
  )
}

module "s3_delphi-quarantine-sme-data-archive" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-quarantine-sme-data-archive"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/quarantine-sme-data-archive/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 30

  custom_expiration = {
    "appreciationengine/activityfeed/"    = 14
    "appreciationengine/membersextended/" = 14
    "appreciationengine/memberslogin/"    = 14
    #"appreciationengine/membersvisittotals_daily/" = 14
  }

  common_tags = merge(
    local.common_tags,
    {
      project                  = "SLZ Data",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_SLZD_S3"
    }
  )
}

module "s3_delphi-quarantine-sme-data-decompressed" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-quarantine-sme-data-decompressed"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/quarantine-sme-data-decompressed/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 14

  custom_expiration = {
    "appreciationengine/activityfeed/"    = 14
    "appreciationengine/membersextended/" = 14
    "appreciationengine/memberslogin/"    = 14
    #"appreciationengine/membersvisittotals_daily/" = 14
    "appreciationengine/request_to_forget/" = 7
  }

  common_tags = merge(
    local.common_tags,
    {
      project                  = "SLZ Data",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_SLZD_S3"
    }
  )
}

module "s3_databricks_tests" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-databricks-tests"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/databricks-tests/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 32
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_S3"
    }
  )
}

module "s3_apps_etl_logs" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-apps-etl-logs"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/apps-etl-logs/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 30
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Apps ETL",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_AETL_S3"
    }
  )
}

module "s3_chartmetric_logs" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-chartmetric-logs"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/chartmetric-logs/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 60
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Chartmetric",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_CHMT_S3"
    }
  )
}

module "s3_chartmetric-hist-data-decompressed" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-chartmetric-hist-data-decompressed"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/chartmetric-hist-data-decompressed/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Chartmetric",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_CHMT_S3"
    }
  )
}

module "s3_chartmetric" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-chartmetric"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/chartmetric/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 14
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Chartmetric",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_CHMT_S3"
    }
  )
}

module "s3_firehose-streams-backup" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-firehose-streams-backup"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/firehose-streams-backup/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_S3"
    }
  )
}

module "s3_exploration" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-exploration"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/exploration/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 5
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Exploration Area",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_EXP_S3"
    }
  )
}

module "s3_autotests" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-autotests"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/autotests/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 30
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_S3"
    }
  )
}

module "s3_exploration_etl_logs" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-exploration-etl-logs"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/exploration-etl-logs/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 5
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Exploration Area",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_EXP_S3"
    }
  )
}

module "s3_sme-data-etl-backfill" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-sme-data-etl-backfill"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/sme-data-etl-backfill/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  standard_ia_days   = 30
  expiration_days    = 90
  common_tags = merge(
    local.common_tags,
    {
      project                  = "ETL",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_ETL_S3"
    }
  )
}

# Autotests buckets
module "s3_sme-data-archive-autotests" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-sme-data-archive-autotests"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/sme-data-archive-autotests/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 14
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_S3"
    }
  )
}

module "s3_sme-data-decompressed-autotests" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-sme-data-decompressed-autotests"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/sme-data-decompressed-autotests/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 14
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_S3"
    }
  )
}

module "s3_sme-data-corrupted-autotests" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-sme-data-corrupted-autotests"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/sme-data-corrupted-autotests/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 14
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_S3"
    }
  )
}

module "s3_quarantine-sme-data-archive-autotests" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-quarantine-sme-data-archive-autotests"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/quarantine-sme-data-archive-autotests/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 14
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_S3"
    }
  )
}

module "s3_quarantine-sme-data-decompressed-autotests" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-quarantine-sme-data-decompressed-autotests"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/quarantine-sme-data-decompressed-autotests/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 30
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_S3"
    }
  )
}

module "s3_public-data-raw" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-public-data-raw"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/public-data-raw/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 14
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_S3"
    }
  )
}

module "s3_public-data-raw-corrupted" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-public-data-raw-corrupted"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/public-data-raw-corrupted/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 14
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_S3"
    }
  )
}

module "s3_apollo-playlist-track-positions-daily-snapshot" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-apollo-playlist-track-positions-daily-snapshot"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/apollo-playlist-track-positions-daily-snapshot/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 5

  versioning                         = true
  noncurrent_version_expiration_days = 5

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_S3"
    }
  )
}

module "s3_apollo-snapshot-temp" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-apollo-snapshot-temp"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/apollo-snapshot-temp/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Public Data",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_PD_S3"
    }
  )
}

module "s3_public-data-gras" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-public-data-gras"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/public-data-gras/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Public Data",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_PD_S3"
    }
  )
}

module "s3_public-data-etl-export" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-public-data-etl-export"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/public-data-etl-export/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json

  custom_expiration = {
    "CHARTS_APPLE/"   = 60
    "CHARTS_SPOTIFY/" = 60
    "CHARTS_TIKTOK/"  = 60
  }

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Public Data",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_PD_S3"
    }
  )
}

module "s3_private-data-etl-export" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-private-data-etl-export"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/private-data-etl-export/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Public Data",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_PD_S3"
    }
  )
}

module "rds_s3_export" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-apollo-rds-export"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/apollo-rds-export/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_S3"
    }
  )
}

module "s3_sme-data-parquet" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-sme-data-parquet"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/sme-data-parquet/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 30
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Apps ETL",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_AETL_S3"
    }
  )
}

module "s3_decibel" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-decibel"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/decibel/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 60
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Decibel",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_DCBL_S3"
    }
  )
}

module "s3_sme-etl-state" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-sme-etl-state"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/sme-etl-state/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json

  versioning                         = true
  noncurrent_version_expiration_days = 10

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Apps ETL",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_AETL_S3"
    }
  )
}

module "s3_import" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-import"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/import/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Apps ETL",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_AETL_S3"
    }
  )
}

module "s3_incoming" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-incoming"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/incoming/"
  bucket_policy      = module.ses_bucket_policy_template.policy_document.json
  expiration_days    = 180

  versioning                         = true
  noncurrent_version_expiration_days = 7

  intelligent_tiering_rules = [
    { name = "EntireBucket" }
  ]

  custom_expiration = {
    "appreciationengine/activity_feed/"   = 14
    "appreciationengine/membersextended/" = 14
    "appreciationengine/memberslogin/"    = 14
    #"appreciationengine/membersvisittotals_daily/"     = 14
    "appreciationengine/request_to_forget/"            = 7,
    "appreciationengine/ae_processed_delete_requests/" = 30
  }

  common_tags = merge(
    local.common_tags,
    {
      project                  = "SLZ Data",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_SLZD_S3"
    }
  )
}

module "s3_outgoing" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-outgoing"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/outgoing/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  custom_expiration  = { "appreciationengine/request_to_forget/" = 7 }

  common_tags = merge(
    local.common_tags,
    {
      project                  = "SLZ Data",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_SLZD_S3"
    }
  )
}

module "s3_slz_troubleshooting" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-slz-troubleshooting"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/slz-troubleshooting/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  #expiration_days    = 14

  custom_expiration = {
    "appreciationengine/activityfeed/"    = 14
    "appreciationengine/membersextended/" = 14
    "appreciationengine/memberslogin/"    = 14
    #"appreciationengine/membersvisittotals_daily/" = 14
    "appreciationengine/request_to_forget/" = 7
  }

  common_tags = merge(
    local.common_tags,
    {
      project                  = "SLZ Data",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_SLZD_S3"
    }
  )
}

module "s3_whitelist_db" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-whitelist-db"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/whitelist-db/"
  bucket_policy      = module.replica_bucket_policy_template.policy_document.json
  versioning         = true
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Whitelist",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_WTLST_S3"
    }
  )
}

module "s3_dapd_snapshot" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-dapd-snapshot"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/dapd-snapshot/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 30
  common_tags = merge(
    local.common_tags,
    {
      project                  = "DAPD",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_DAPD_S3"
    }
  )
}

// DAPD-1839
module "s3_market_size_export" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-market-size-export"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/market-size-export/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 30
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Exploration",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_EXP_S3"
    }
  )
}

// ticket DAPD-1003/DAPD-1372
module "s3_backfill_apple_charts" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-backfill-apple-charts"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/backfill-apple-charts/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  common_tags = merge(
    local.common_tags,
    {
      project                  = "ETL",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_ETL_S3"
      ticket                   = "DAPD-1372"
    }
  )
}

# Bucket metrics
locals {
  bucket_names = [
    module.s3_sme-data-archive.bucket.id,
    module.s3_sme-data-decompressed.bucket.id,
    module.s3_sme-data-corrupted.bucket.id,
    module.s3_config.bucket.id,
    module.s3_apps_etl_output.bucket.id,
    module.s3_delphi-quarantine-sme-data-archive.bucket.id,
    module.s3_delphi-quarantine-sme-data-decompressed.bucket.id,
    module.s3_databricks_tests.bucket.id,
    module.s3_exploration.bucket.id,
  ]
}

resource "aws_s3_bucket_metric" "all_buckets_metrics" {
  count  = length(local.bucket_names)
  bucket = local.bucket_names[count.index]
  name   = "EntireBucket"
}

# Granting access to buckets from production account
module "aws_accounts_list" {
  source = "../../../modules/iam/aws_accounts_list"
}

locals {
  delphi_prod_root_arn     = "arn:aws:iam::${module.aws_accounts_list.accounts.gdb-delphi-prod}:root"
  databricks_dev_root_arn  = "arn:aws:iam::${module.aws_accounts_list.accounts.gdb-databricks-dev}:root"
  databricks_prod_root_arn = "arn:aws:iam::${module.aws_accounts_list.accounts.gdb-databricks-prod}:root"
}

module "ses_bucket_policy_template" {
  source         = "../../../modules/s3/bucket_policies/external_access_template"
  ses_account_id = local.account_id
  full_access_arns = [
    local.delphi_prod_root_arn,
    local.databricks_dev_root_arn,
    local.databricks_prod_root_arn,
  ]

  custom_path_role_permissions = [
    {
      "arn"    = "arn:aws:iam::392043586009:user/ae_sme_s3"
      "path"   = "appreciationengine/activity_feed/"
      "read"   = true
      "write"  = true
      "delete" = false
    },
    {
      "arn"    = "arn:aws:iam::392043586009:user/ae_sme_s3"
      "path"   = "appreciationengine/ae_processed_delete_requests/"
      "read"   = true
      "write"  = true
      "delete" = false
    }
  ]

  replication_roles = ["arn:aws:iam::${module.aws_accounts_list.accounts.gdb-delphi-prod}:role/prod-delphi-s3-incoming-replication-role"]
}

module "replica_bucket_policy_template" {
  source            = "../../../modules/s3/bucket_policies/external_access_template"
  full_access_arns  = [local.delphi_prod_root_arn]
  replication_roles = ["arn:aws:iam::${module.aws_accounts_list.accounts.gdb-whitelist-legacy}:role/cmn-whitelist-dms-s3-replication-role"]
}

module "main_bucket_policy_template" {
  source = "../../../modules/s3/bucket_policies/external_access_template"
  full_access_arns = [
    local.delphi_prod_root_arn,
    local.databricks_dev_root_arn,
    local.databricks_prod_root_arn,
  ]
}

data "aws_iam_role" "databricks_instance" {
  provider = aws.gdb-databricks-dev
  name     = "${local.env_prefix}-databricks-instance"
}

locals {
  databricks_role_arn = data.aws_iam_role.databricks_instance.arn
  databricks_role_id  = "${data.aws_iam_role.databricks_instance.unique_id}:*"
}

module "s3_etl_artifacts" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-etl-artifacts"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/etl-artifacts/"
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_S3"
    }
  )
}

module "s3_etl_artifacts_policy" {
  source                = "../../../modules/s3/bucket_policies/restrictive_for_prod"
  bucket                = module.s3_etl_artifacts.bucket.id
  admin_users           = var.admin_users
  debug_users           = var.debug_users
  admin_roles           = var.admin_roles
  internal_delete_roles = ["cross_account_deployment_role", ]
  internal_upload_roles = ["cross_account_deployment_role", ]
  internal_read_roles = [
    "dev-delphi-databricks_role",
    "qa-delphi-databricks_role",
    "stage-delphi-databricks_role",
    "cross_account_user",
    "cross_account_qa",
    "cross_account_developer",
    "cross_account_deployment_role",
  ]
  external_read_roles_arn = [local.databricks_role_arn]
  external_read_roles_ids = [local.databricks_role_id]
}


module "s3_notifications" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-notifications"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/notifications/"
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Apps ETL",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_AETL_S3"
    }
  )
}

module "s3_notifications_bucket_policy" {
  source = "../../../modules/s3/bucket_policies/external_access"
  read_arns = [
    "arn:aws:iam::${module.aws_accounts_list.accounts.gdb-apollo-dev}:root",
  ]
  bucket_name = module.s3_notifications.bucket.id
}

module "s3_aws_dynamodb_poc" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-aws-dynamodb-poc"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/aws-dynamodb-poc/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Apps ETL",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_AETL_S3"
    }
  )
}

module "s3_youtube_ugc_export" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-youtube-ugc-export"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/youtube-ugc-export/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  common_tags = merge(
    local.common_tags,
    {
      project                  = "DTF Data",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_DTFD_S3"
    }
  )
}

module "s3_spotify-juno-export" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-spotify-juno-export"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/spotify-juno-export/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  common_tags = merge(
    local.common_tags,
    {
      project                  = "DTF Data",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_DTFD_S3"
    }
  )
}

module "s3_amazon-stations-metadata-snapshot" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-amazon-stations-metadata-snapshot"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/amazon-stations-metadata-snapshot/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 14
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Apps ETL",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_AETL_S3"
    }
  )
}

module "s3_crm" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-crm"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/crm/"
  bucket_policy      = module.crm_replication_bucket_policy_template.policy_document.json
  versioning         = true

  custom_expiration = {
    "salesforce-marketing-cloud/" = 5
  }

  common_tags = merge(
    local.common_tags,
    {
      project                  = "CRM",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_CRM_S3"
    }
  )
}

module "s3_playlist_notifications" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-playlist-notifications"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/playlist-notifications/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 180
  common_tags = merge(
    local.common_tags,
    {
      project                  = "DAPD",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_DAPD_S3"
    }
  )
}

module "crm_replication_bucket_policy_template" {
  source = "../../../modules/s3/bucket_policies/external_access_template"
  full_access_arns = [
    local.delphi_prod_root_arn,
    local.databricks_dev_root_arn,
    local.databricks_prod_root_arn,
  ]
  replication_roles = [
    "arn:aws:iam::${local.account_id}:role/dev-delphi-crm-s3-replication-role",
    "arn:aws:iam::${module.aws_accounts_list.accounts.gdb-delphi-prod}:role/prod-delphi-crm-s3-replication-role"
  ]
}

module "s3_sme_spotify_top_reports" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-sme-spotify-top-reports"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/sme-spotify-top-reports/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  #expiration_days    = 180
  common_tags = merge(
    local.common_tags,
    {
      project                  = "DAPD",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_DAPD_S3"
    }
  )
}

module "s3_slz_temp" {
  source             = "../../../modules/s3/private_bucket_with_logs_aes256_v2"
  bucket_name        = "${local.name_prefix}-slz-temp"
  logs_bucket_id     = data.aws_s3_bucket.logs.id
  logs_object_prefix = "${local.name_prefix}/slz-temp/"
  bucket_policy      = module.main_bucket_policy_template.policy_document.json
  expiration_days    = 7
  common_tags = merge(
    local.common_tags,
    {
      project                  = "SLZ Data",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_SLZD_S3"
    }
  )
}
