module "leveldb_backup_bucket" {
  source = "../../../modules/s3/private_bucket_with_logs_aes256_v2"

  bucket_name        = "${local.name_prefix}-leveldb-backup"
  logs_bucket_id     = data.aws_s3_bucket.security_logs.id
  logs_object_prefix = "${local.name_prefix}/leveldb-backup"
  default_policy     = true

  deep_archive_days = 30

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Data",
      service                  = "S3",
      plat_env_project_service = "APL_PROD_DATA_S3"
    }
  )
}

module "filtr_admin_staging_bucket" {
  source = "../../../modules/s3/private_bucket_with_logs_aes256_v2"

  bucket_name        = "filtr-admin-staging"
  logs_bucket_id     = data.aws_s3_bucket.security_logs.id
  logs_object_prefix = "filtr-admin-staging/"
  default_policy     = true

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Data",
      service                  = "S3",
      plat_env_project_service = "APL_PROD_DATA_S3"
    }
  )
}

module "filtr_admin_production_bucket" {
  source = "../../../modules/s3/private_bucket_with_logs_aes256_v2"

  bucket_name        = "filtr-admin-production"
  logs_bucket_id     = data.aws_s3_bucket.security_logs.id
  logs_object_prefix = "filtr-admin-production/"
  default_policy     = true

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Data",
      service                  = "S3",
      plat_env_project_service = "APL_PROD_DATA_S3"
    }
  )
}

module "filtr_www_production_bucket" {
  source = "../../../modules/s3/private_bucket_with_logs_aes256_v2"

  bucket_name        = "filtr-www-production"
  logs_bucket_id     = data.aws_s3_bucket.security_logs.id
  logs_object_prefix = "filtr-www-production/"
  default_policy     = true

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Data",
      service                  = "S3",
      plat_env_project_service = "APL_PROD_DATA_S3"
    }
  )
}

module "filtr_spotify_ads_bucket" {
  source = "../../../modules/s3/private_bucket_with_logs_aes256_v2"

  bucket_name        = "filtr-spotify-ads"
  logs_bucket_id     = data.aws_s3_bucket.security_logs.id
  logs_object_prefix = "filtr-spotify-ads/"
  default_policy     = true

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Data",
      service                  = "S3",
      plat_env_project_service = "APL_PROD_DATA_S3"
    }
  )
}

module "filtr_ch_tv_app_bucket" {
  source = "../../../modules/s3/private_bucket_with_logs_aes256_v2"

  bucket_name        = "filtr-ch-tv-app"
  logs_bucket_id     = data.aws_s3_bucket.security_logs.id
  logs_object_prefix = "filtr-ch-tv-app/"
  default_policy     = true

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Data",
      service                  = "S3",
      plat_env_project_service = "APL_PROD_DATA_S3"
    }
  )
}

module "developer_filtr_com_bucket" {
  source = "../../../modules/s3/private_bucket_with_logs_aes256_v2"

  bucket_name        = "developer-filtr-com"
  logs_bucket_id     = data.aws_s3_bucket.security_logs.id
  logs_object_prefix = "developer-filtr-com/"

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Data",
      service                  = "S3",
      plat_env_project_service = "APL_PROD_DATA_S3"
    }
  )
}

module "sme_stream_reports" {
  source = "../../../modules/s3/private_bucket_with_logs_aes256_v2"

  bucket_name        = "sme-stream-reports"
  logs_bucket_id     = data.aws_s3_bucket.security_logs.id
  logs_object_prefix = "sme-stream-reports/"

  deep_archive_days = 30

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Data",
      service                  = "S3",
      plat_env_project_service = "APL_PROD_DATA_S3"
    }
  )
}

module "sme_aggregated_stream_reports" {
  source = "../../../modules/s3/private_bucket_with_logs_aes256_v2"

  bucket_name        = "sme-aggregated-stream-reports"
  logs_bucket_id     = data.aws_s3_bucket.security_logs.id
  logs_object_prefix = "sme-aggregated-stream-reports/"
  expiration_days    = 30

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Data",
      service                  = "S3",
      plat_env_project_service = "APL_PROD_DATA_S3"
    }
  )
}

module "sme_aggregated_stream_reports_reprocessing" {
  source = "../../../modules/s3/private_bucket_with_logs_aes256_v2"

  bucket_name        = "sme-aggregated-stream-reports-reprocessing"
  logs_bucket_id     = data.aws_s3_bucket.security_logs.id
  logs_object_prefix = "sme-aggregated-stream-reports-reprocessing/"

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Data",
      service                  = "S3",
      plat_env_project_service = "APL_PROD_DATA_S3"
    }
  )
}

module "filtr_new_releases" {
  source = "../../../modules/s3/private_bucket_with_logs_aes256_v2"

  bucket_name        = "filtr-new-releases"
  logs_bucket_id     = data.aws_s3_bucket.security_logs.id
  logs_object_prefix = "filtr-new-releases/"

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Data",
      service                  = "S3",
      plat_env_project_service = "APL_PROD_DATA_S3"
    }
  )
}

module "filtr_new_releases_upc" {
  source = "../../../modules/s3/private_bucket_with_logs_aes256_v2"

  bucket_name        = "filtr-new-releases-upc"
  logs_bucket_id     = data.aws_s3_bucket.security_logs.id
  logs_object_prefix = "filtr-new-releases-upc/"

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Data",
      service                  = "S3",
      plat_env_project_service = "APL_PROD_DATA_S3"
    }
  )
}

module "filtr_spotify_browse_export" {
  source = "../../../modules/s3/private_bucket_with_logs_aes256_v2"

  bucket_name        = "filtr-spotify-browse-export"
  logs_bucket_id     = data.aws_s3_bucket.security_logs.id
  logs_object_prefix = "filtr-spotify-browse-export/"

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Data",
      service                  = "S3",
      plat_env_project_service = "APL_PROD_DATA_S3"
    }
  )
}

module "sme_spotify_top_reports" {
  source = "../../../modules/s3/private_bucket_with_logs_aes256_v2"

  bucket_name        = "sme-spotify-top-reports"
  logs_bucket_id     = data.aws_s3_bucket.security_logs.id
  logs_object_prefix = "sme-spotify-top-reports/"
  object_ownership   = "BucketOwnerEnforced"

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Data",
      service                  = "S3",
      plat_env_project_service = "APL_PROD_DATA_S3"
    }
  )
}

resource "aws_s3_bucket" "sony_editorial_images" {
  bucket        = "sony-editorialimages"
  force_destroy = true

  logging {
    target_bucket = data.aws_s3_bucket.security_logs.id
    target_prefix = "s3/sony-editorialimages/"
  }

  cors_rule {
    allowed_methods = [
      "GET",
    ]
    allowed_headers = [
      "Authorization",
      "Content-*",
      "Host",
    ]
    allowed_origins = [
      "https://${module.domains.dev["apolloapp"]}",
      "https://${module.domains.test["apolloapp"]}",
      "https://${module.domains.qa["apolloapp"]}",
      "https://${module.domains.stage["apolloapp"]}",
      "https://${module.domains.uat["apolloapp"]}",
      "https://${module.domains.prod["apolloapp"]}",
    ]
    max_age_seconds = 3000
  }

  tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_PRL_S3"
    }
  )
}

resource "aws_s3_bucket_ownership_controls" "sony_editorial_images" {
  bucket = aws_s3_bucket.sony_editorial_images.id

  rule {
    object_ownership = "BucketOwnerEnforced"
  }
}

module "bucket_policies" {
  source = "../../../modules/s3/bucket_policies/external_access_multibucket"

  full_access_arns = [
    "arn:aws:iam::${module.aws_account_list.accounts["gdb-apollo-prod"]}:role/prod-apollo-spotifyconsumeranalytics_role",
    "arn:aws:iam::${module.aws_account_list.accounts["gdb-apollo-prod"]}:role/prod-apollo-appleconsumeranalytics_role",
    "arn:aws:iam::${module.aws_account_list.accounts["gdb-apollo-prod"]}:role/prod-apollo-etl_s3_rw_ecs_role",
  ]

  read_arns = [
    "arn:aws:iam::${module.aws_account_list.accounts["gdb-delphi-prod"]}:role/prod-apollo-aurora_s3",
  ]

  bucket_list = [
    module.sme_aggregated_stream_reports.bucket.id,
    module.sme_aggregated_stream_reports_reprocessing.bucket.id,
  ]
}

module "etl_bucket_policies_prod" {
  source = "../../../modules/s3/bucket_policies/external_access_multibucket"

  full_access_arns = [
    "arn:aws:iam::${module.aws_account_list.accounts["gdb-apollo-prod"]}:role/prod-apollo-etl_s3_rw_ecs_role",
    "arn:aws:iam::${module.aws_account_list.accounts["gdb-delphi-prod"]}:root",
  ]

  bucket_list = [
    module.filtr_new_releases.bucket.id,
    module.filtr_new_releases_upc.bucket.id,
    module.filtr_spotify_browse_export.bucket.id,
    module.sme_spotify_top_reports.bucket.id,
    module.sme_stream_reports.bucket.id,
  ]
}

module "etl_and_cloudfront_bucket_policies_prod" {
  source = "../../../modules/s3/bucket_policies/external_access_multibucket"

  read_arns = [
    aws_cloudfront_origin_access_identity.sony_editorial_images_identity.iam_arn
  ]

  full_access_arns = [
    "arn:aws:iam::${module.aws_account_list.accounts["gdb-apollo-prod"]}:role/prod-apollo-etl_s3_rw_ecs_role",
  ]

  bucket_list = [
    aws_s3_bucket.sony_editorial_images.id,
  ]
}
