data "aws_s3_bucket" "s3_video_bucket" {
  bucket = "${var.environment}-${var.video_assets_bucket_name}"
}

data "aws_iam_policy_document" "s3_mezzanine_dir_putonly_policy" {
  statement {
    effect = "Allow"

    actions = [
      "s3:PutObject",
      "s3:PutObjectAcl",
      "s3:PutObjectTagging",
      "s3:PutObjectVersionAcl",
      "s3:PutObjectVersionTagging",
    ]

    resources = [
      "${data.aws_s3_bucket.s3_video_bucket.arn}/mezzanine/*",
    ]
  }
}

data "aws_iam_policy_document" "s3_mezzanine_dir_rw_policy" {
  statement {
    effect = "Allow"

    actions = [
      "s3:GetLifecycleConfiguration",
      "s3:GetObject",
      "s3:GetObjectAcl",
      "s3:GetObjectTorrent",
      "s3:GetObjectVersion",
      "s3:GetObjectVersionAcl",
      "s3:GetObjectVersionTorrent",
      "s3:GetReplicationConfiguration",
      "s3:HeadObject",
      "s3:PutObject",
      "s3:PutObjectAcl",
      "s3:PutObjectTagging",
      "s3:PutObjectVersionAcl",
      "s3:PutObjectVersionTagging",
    ]

    resources = [
      "${data.aws_s3_bucket.s3_video_bucket.arn}/mezzanine/*",
    ]
  }
}

data "aws_iam_policy_document" "s3_streamable_preview_dir_readonly_policy" {
  statement {
    effect = "Allow"

    actions = [
      "s3:GetLifecycleConfiguration",
      "s3:GetObject",
      "s3:GetObjectAcl",
      "s3:GetObjectTorrent",
      "s3:GetObjectVersion",
      "s3:GetObjectVersionAcl",
      "s3:GetObjectVersionTorrent",
      "s3:GetReplicationConfiguration",
    ]

    resources = [
      "${data.aws_s3_bucket.s3_video_bucket.arn}/streamable-preview/*",
    ]
  }
}

data "aws_iam_policy_document" "s3_streamable_preview_dir_putonly_policy" {
  statement {
    effect = "Allow"

    actions = [
      "s3:PutObject",
      "s3:PutObjectAcl",
      "s3:PutObjectTagging",
      "s3:PutObjectVersionAcl",
      "s3:PutObjectVersionTagging",
    ]

    resources = [
      "${data.aws_s3_bucket.s3_video_bucket.arn}/streamable-preview/*",
    ]
  }
}

data "aws_iam_policy_document" "s3_thumbnails_dir_putonly_policy" {
  statement {
    effect = "Allow"

    actions = [
      "s3:PutObject",
      "s3:PutObjectAcl",
      "s3:PutObjectTagging",
      "s3:PutObjectVersionAcl",
      "s3:PutObjectVersionTagging",
    ]

    resources = [
      "${data.aws_s3_bucket.s3_video_bucket.arn}/thumbnails/*",
    ]
  }
}

data "aws_iam_policy_document" "s3_raw_dir_putonly_policy" {
  statement {
    effect = "Allow"

    actions = [
      "s3:PutObject",
      "s3:PutObjectAcl",
      "s3:PutObjectTagging",
      "s3:PutObjectVersionAcl",
      "s3:PutObjectVersionTagging",
    ]

    resources = [
      "${data.aws_s3_bucket.s3_video_bucket.arn}/raw/*",
    ]
  }
}

data "aws_iam_policy_document" "s3_raw_dir_rw_policy" {
  statement {
    effect = "Allow"

    actions = [
      "s3:GetBucketAcl",
      "s3:GetBucketCORS",
      "s3:GetBucketLocation",
      "s3:GetBucketLogging",
      "s3:GetBucketNotification",
      "s3:GetBucketPolicy",
      "s3:GetBucketRequestPayment",
      "s3:GetBucketTagging",
      "s3:GetBucketVersioning",
      "s3:GetBucketWebsite",
      "s3:GetLifecycleConfiguration",
      "s3:GetObject",
      "s3:GetObjectAcl",
      "s3:GetObjectTorrent",
      "s3:GetObjectVersion",
      "s3:GetObjectVersionAcl",
      "s3:GetObjectVersionTorrent",
      "s3:ListBucket",
      "s3:ListBucketMultipartUploads",
      "s3:ListBucketVersions",
      "s3:ListMultipartUploadParts",
      "s3:PutObject",
      "s3:PutObjectAcl",
      "s3:PutObjectTagging",
      "s3:PutObjectVersionAcl",
      "s3:PutObjectVersionTagging",
    ]

    resources = [
      "${data.aws_s3_bucket.s3_video_bucket.arn}/raw/*",
    ]
  }
}

data "aws_iam_policy_document" "s3_blank_dir_readonly_policy" {
  statement {
    effect = "Allow"

    actions = [
      "s3:GetLifecycleConfiguration",
      "s3:GetObject",
      "s3:GetObjectAcl",
      "s3:GetObjectTorrent",
      "s3:GetObjectVersion",
      "s3:GetObjectVersionAcl",
      "s3:GetObjectVersionTorrent",
      "s3:GetReplicationConfiguration",
    ]

    resources = [
      "${data.aws_s3_bucket.s3_video_bucket.arn}/blank/*",
    ]
  }
}

data "aws_iam_policy_document" "s3_blank_dir_putonly_policy" {
  statement {
    effect = "Allow"

    actions = [
      "s3:PutObject",
      "s3:PutObjectAcl",
      "s3:PutObjectTagging",
      "s3:PutObjectVersionAcl",
      "s3:PutObjectVersionTagging",
    ]

    resources = [
      "${data.aws_s3_bucket.s3_video_bucket.arn}/blank/*",
    ]
  }
}

data "aws_iam_policy_document" "s3_ingest_dir_rwd_policy" {
  statement {
    effect = "Allow"

    actions = [
      "s3:DeleteObject",
      "s3:DeleteObjectTagging",
      "s3:DeleteObjectVersion",
      "s3:DeleteObjectVersionTagging",
      "s3:GetBucketAcl",
      "s3:GetBucketCORS",
      "s3:GetBucketLocation",
      "s3:GetBucketLogging",
      "s3:GetBucketNotification",
      "s3:GetBucketPolicy",
      "s3:GetBucketRequestPayment",
      "s3:GetBucketTagging",
      "s3:GetBucketVersioning",
      "s3:GetBucketWebsite",
      "s3:GetLifecycleConfiguration",
      "s3:GetObject",
      "s3:GetObjectAcl",
      "s3:GetObjectTorrent",
      "s3:GetObjectVersion",
      "s3:GetObjectVersionAcl",
      "s3:GetObjectVersionTorrent",
      "s3:ListBucket",
      "s3:ListBucketMultipartUploads",
      "s3:ListBucketVersions",
      "s3:ListMultipartUploadParts",
      "s3:PutObject",
      "s3:PutObjectAcl",
      "s3:PutObjectTagging",
      "s3:PutObjectVersionAcl",
      "s3:PutObjectVersionTagging",
    ]

    resources = [
      "${data.aws_s3_bucket.s3_video_bucket.arn}/ingest/*",
    ]
  }
}

data "aws_iam_policy_document" "s3_raw_and_thumbnails_dir_putonly_policy" {
  statement {
    effect = "Allow"

    actions = [
      "s3:PutObject",
      "s3:PutObjectAcl",
      "s3:PutObjectTagging",
      "s3:PutObjectVersionAcl",
      "s3:PutObjectVersionTagging",
    ]

    resources = [
      "${data.aws_s3_bucket.s3_video_bucket.arn}/raw/*",
      "${data.aws_s3_bucket.s3_video_bucket.arn}/thumbnails/*",
    ]
  }
}

data "aws_iam_policy_document" "s3_video_dashboard_item_policy_document" {
  statement {
    effect = "Allow"

    actions = [
      "s3:GetBucketLocation",
      "s3:GetObject",
      "s3:ListBucket",
      "s3:PutObject",
    ]

    resources = [
      "${data.aws_s3_bucket.s3_video_bucket.arn}/video_dashboard_item/*",
    ]
  }
}

data "aws_iam_policy" "s3_list_bucket_policy" {
  name = "S3-${data.aws_s3_bucket.s3_video_bucket.id}-list-bucket"
}

data "aws_iam_policy" "s3_mezzanine_dir_readonly_policy" {
  name = "S3-${data.aws_s3_bucket.s3_video_bucket.id}-mezzanine-RO"
}

data "aws_iam_policy" "s3_thumbnails_dir_readonly_policy" {
  name = "S3-${data.aws_s3_bucket.s3_video_bucket.id}-thumbnails-RO"
}

data "aws_iam_policy" "s3_raw_dir_readonly_policy" {
  name = "S3-${data.aws_s3_bucket.s3_video_bucket.id}-raw-RO"
}

resource "aws_iam_policy" "s3_raw_dir_putonly_policy" {
  name   = "S3-${data.aws_s3_bucket.s3_video_bucket.id}-raw-WO"
  policy = data.aws_iam_policy_document.s3_raw_dir_putonly_policy.json
}

resource "aws_iam_policy" "s3_raw_dir_rw_policy" {
  name   = "S3-${data.aws_s3_bucket.s3_video_bucket.id}-raw-RW"
  policy = data.aws_iam_policy_document.s3_raw_dir_rw_policy.json
}

resource "aws_iam_policy" "s3_mezzanine_dir_putonly_policy" {
  name   = "S3-${data.aws_s3_bucket.s3_video_bucket.id}-mezzanine-WO"
  policy = data.aws_iam_policy_document.s3_mezzanine_dir_putonly_policy.json
}

resource "aws_iam_policy" "s3_mezzanine_dir_rw_policy" {
  name   = "S3-${data.aws_s3_bucket.s3_video_bucket.id}-mezzanine-RW"
  policy = data.aws_iam_policy_document.s3_mezzanine_dir_rw_policy.json
}

resource "aws_iam_policy" "s3_thumbnails_dir_putonly_policy" {
  name   = "S3-${data.aws_s3_bucket.s3_video_bucket.id}-thumbnails-WO"
  policy = data.aws_iam_policy_document.s3_thumbnails_dir_putonly_policy.json
}

resource "aws_iam_policy" "s3_streamable_preview_dir_readonly_policy" {
  name   = "S3-${data.aws_s3_bucket.s3_video_bucket.id}-streamable-preview-RO"
  policy = data.aws_iam_policy_document.s3_streamable_preview_dir_readonly_policy.json
}

resource "aws_iam_policy" "s3_streamable_preview_dir_putonly_policy" {
  name   = "S3-${data.aws_s3_bucket.s3_video_bucket.id}-streamable-preview-WO"
  policy = data.aws_iam_policy_document.s3_streamable_preview_dir_putonly_policy.json
}

resource "aws_iam_policy" "s3_blank_dir_readonly_policy" {
  name   = "S3-${data.aws_s3_bucket.s3_video_bucket.id}-blank-RO"
  policy = data.aws_iam_policy_document.s3_blank_dir_readonly_policy.json
}

resource "aws_iam_policy" "s3_blank_dir_putonly_policy" {
  name   = "S3-${data.aws_s3_bucket.s3_video_bucket.id}-blank-WO"
  policy = data.aws_iam_policy_document.s3_blank_dir_putonly_policy.json
}

resource "aws_iam_policy" "s3_ingest_dir_rwd_policy" {
  name   = "S3-${data.aws_s3_bucket.s3_video_bucket.id}-ingest-RWD"
  policy = data.aws_iam_policy_document.s3_ingest_dir_rwd_policy.json
}

resource "aws_iam_policy" "s3_raw_and_thumbnails_dir_putonly_policy" {
  name   = "S3-${data.aws_s3_bucket.s3_video_bucket.id}-raw-and-thumbnails-WO"
  policy = data.aws_iam_policy_document.s3_raw_and_thumbnails_dir_putonly_policy.json
}
