# aws config
provider "aws" {
  region  = var.region
  profile = var.profile
  version = "~> 2.66"
}

provider "aws" {
  alias   = "us_east_1"
  profile = var.profile
  region  = "us-east-1"
}

# tags
locals {
  tags = {
    "Project"     = "onmyoji-deck-builder"
    "Description" = "website to build and share onmyoji decks"
  }
}

# cloudfront
module "cloudfront_s3_cdn" {
  source                   = "git::https://github.com/cloudposse/terraform-aws-cloudfront-s3-cdn.git?ref=tags/0.52.0"
  stage                    = var.stage
  name                     = var.name
  parent_zone_id           = var.parent_zone_id
  dns_alias_enabled        = true
  acm_certificate_arn      = var.acm_certificate_arn
  use_regional_s3_endpoint = true
  origin_force_destroy     = true
  compress                 = true
  cors_allowed_headers     = ["*"]
  cors_allowed_methods     = ["GET", "HEAD", "PUT", "POST"]
  cors_allowed_origins     = var.allowed_origins
  tags                     = local.tags
  aliases                  = var.aliases
  index_document           = "index.html"
  error_document           = "index.html"
  website_enabled          = true
  # lambda_function_association = [
  #   {
  #     event_type : "origin-request",
  #     lambda_arn : aws_lambda_function.directory_indexes.qualified_arn,
  #     include_body : false
  #   }
  # ]

  # this policy sets the bucket to be public for all newly created files
  additional_bucket_policy = <<-EOT
  {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Sid":"PublicRead",
        "Effect":"Allow",
        "Principal":"*",
        "Action":["s3:GetObject"],
        "Resource":"arn:aws:s3:::${module.cloudfront_s3_cdn.s3_bucket}/*"
      }
    ]
  }
  EOT
}

# data "archive_file" "lambda_main" {
#   type        = "zip"
#   source_file = var.source_file
#   output_path = "${var.source_file}.zip"
# }

# resource "aws_lambda_function" "directory_indexes" {
#   provider         = aws.us_east_1
#   function_name    = "${var.stage}-${var.name}-directory_indexes"
#   filename         = "${var.source_file}.zip"
#   source_code_hash = data.archive_file.lambda_main.output_base64sha256
#   # s3_bucket     = aws_s3_bucket.lambda_s3.id
#   # s3_key        = var.lambda_key
#   handler = var.handler
#   runtime = var.runtime
#   role    = aws_iam_role.lambda_role.arn
#   publish = true
#   tags    = local.tags

#   depends_on = [aws_iam_role_policy_attachment.lambda_logging]
# }

# ## Lambda iam role & policies

# resource "aws_iam_role" "lambda_role" {
#   name = "${var.stage}-${var.name}-lambda"
#   tags = local.tags

#   assume_role_policy = <<-EOT
#   {
#     "Version": "2012-10-17",
#     "Statement": [
#         {
#           "Effect": "Allow",
#           "Principal": {
#               "Service": [
#                 "lambda.amazonaws.com",
#                 "edgelambda.amazonaws.com"
#               ]
#           },
#           "Action": "sts:AssumeRole"
#         }
#     ]
#   }
#   EOT
# }

# resource "aws_iam_policy" "lambda_logging" {
#   name   = "${var.stage}-${var.name}-lambda_logging"
#   policy = <<-EOT
#   {
#     "Version": "2012-10-17",
#     "Statement": [
#       {
#         "Action": [
#           "logs:CreateLogGroup",
#           "logs:CreateLogStream",
#           "logs:PutLogEvents"
#         ],
#         "Resource": "arn:aws:logs:*:*:*",
#         "Effect": "Allow"
#       }
#     ]
#   }
#   EOT
# }

# resource "aws_iam_role_policy_attachment" "lambda_logging" {
#   role       = aws_iam_role.lambda_role.name
#   policy_arn = aws_iam_policy.lambda_logging.arn
# }
