data "aws_iam_policy_document" "common_lambda_policy_document" {
  statement {
    effect = "Allow"
    resources = [
    "arn:aws:s3:::*"]
    actions = [
    "s3:ListAllMyBuckets"]
  }

  statement {
    effect = "Allow"
    resources = [
    "arn:aws:s3:::${var.input_bucket_name}"]
    actions = [
    "s3:ListBucket"]
  }

  statement {
    sid    = ""
    effect = "Allow"
    resources = [
    "arn:aws:s3:::${var.input_bucket_name}/*"]

    actions = [
      "s3:GetObject",
      "s3:GetObjectAcl",
    ]
  }

  statement {
    sid    = ""
    effect = "Allow"
    resources = [
    module.sns_general_status.proxied_sns_arn]

    actions = [
      "sns:GetPlatformApplicationAttributes",
      "sns:GetTopicAttributes",
      "sns:Publish",
    ]
  }

  statement {
    sid       = ""
    effect    = "Allow"
    resources = ["*"]

    actions = [
      "logs:CreateLogGroup",
      "logs:CreateLogStream",
      "logs:PutLogEvents",
      "ec2:CreateNetworkInterface",
      "ec2:DescribeNetworkInterfaces",
      "ec2:DeleteNetworkInterface",
    ]
  }
}

resource "aws_iam_policy" "common_lambda_policy" {
  name        = "${var.environment}-asset-transcoder-common-lambda-policy"
  description = "Common asset-transcoder lambda policy"
  policy      = data.aws_iam_policy_document.common_lambda_policy_document.json
}

data "aws_iam_policy_document" "write_to_output_bucket_policy_document" {

  statement {
    sid       = ""
    effect    = "Allow"
    resources = formatlist("arn:aws:s3:::%s/*", var.output_buckets_names)

    actions = [
      "s3:GetBucketAcl",
      "s3:GetObject",
      "s3:GetObjectAcl",
      "s3:GetObjectVersion",
      "s3:GetObjectVersionAcl",
      "s3:ListBucket",
      "s3:PutObject",
      "s3:PutObjectAcl",
      "s3:PutObjectVersionAcl",
    ]
  }

}

resource "aws_iam_policy" "write_to_output_bucket_policy" {
  name        = "${var.environment}-asset-transcoder-write-to-output-bucket-policy"
  description = "Write access to output buckets for asset-transcoder lambdas"
  policy      = data.aws_iam_policy_document.write_to_output_bucket_policy_document.json
}

data "aws_iam_policy_document" "final_status_publish_lambda_policy_document" {
  statement {
    sid    = ""
    effect = "Allow"

    resources = [
      module.sns_final_status.proxied_sns_arn
    ]

    actions = [
      "sns:GetPlatformApplicationAttributes",
      "sns:GetTopicAttributes",
      "sns:Publish",
    ]
  }
}

resource "aws_iam_policy" "final_status_publish_lambda_policy" {
  name   = "${var.environment}-final-status-publish-lambda-policy"
  policy = data.aws_iam_policy_document.final_status_publish_lambda_policy_document.json
}