data "aws_s3_bucket" "security_logs" {
  bucket = "security-${local.account_id}-logs"
}

data "aws_s3_bucket" "jenkins_artifacts" {
  bucket = "${local.name_prefix}-jenkins-artifacts"
}

module "default_policy_template" {
  source = "../../../modules/s3/bucket_policies/default_policy_template"
}

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

  bucket_name        = "${local.name_prefix}-cross-products-documentation"
  logs_bucket_id     = data.aws_s3_bucket.security_logs.id
  logs_object_prefix = "${local.env_prefix}/cross-products-documentation/"
  versioning         = true

  common_tags = merge(
    local.common_tags,
    {
      Name                     = "${local.name_prefix}-cross-products-documentation",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_S3"
    }
  )
}

data "aws_iam_policy_document" "cross_products_documentation_policy" {
  version   = "2012-10-17"
  policy_id = "CloudFrontRO"

  source_policy_documents = [replace(
    module.default_policy_template.document.json,
    module.default_policy_template.bucket_arn,
    module.cross_products_documentation.bucket.arn,
  )]

  statement {
    sid       = "CloudFrontRO"
    effect    = "Allow"
    actions   = ["s3:GetObject"]
    resources = ["${module.cross_products_documentation.bucket.arn}/*"]

    principals {
      identifiers = [aws_cloudfront_origin_access_identity.cross_products_documentation_access_identity.iam_arn]
      type        = "AWS"
    }
  }
}

resource "aws_s3_bucket_policy" "cross_products_documentation" {
  bucket = module.cross_products_documentation.bucket.id
  policy = data.aws_iam_policy_document.cross_products_documentation_policy.json
}

resource "aws_s3_bucket_notification" "cross_products_documentation" {
  bucket = module.cross_products_documentation.bucket.id
  lambda_function {
    lambda_function_arn = aws_lambda_function.cross_product_documentation_notifications_lambda.arn
    events              = ["s3:ObjectCreated:*"]
  }
}
