provider "aws" {
  region = "us-east-1"
}

# Terraform backends cannot contain interpolations
terraform {
  backend "s3" {
    bucket  = "orcd-terraform-state"
    key     = "qa/lambda-renew/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}

module "buckets" {
  source      = "../modules/bucket"
  environment = "${var.environment}"
}

module "lambda_renew" {
  source = "../modules/lambdas/renew"

  environment            = "${var.environment}"
  vpc_security_group_ids = "${var.vpc_security_group_ids}"
  vpc_subnet_ids         = "${var.vpc_subnet_ids}"
  lambda_memory_size     = "${var.lambda_renew_lambda_memory_size}"
  LOGGER_DSN             = "${var.LOGGER_DSN}"
}

module "lambda_renew_manager" {
  source = "../modules/lambdas/renew_manager"

  cloudwatch_event_schedule = "rate(1 minute)"
  environment               = "${var.environment}"
  vpc_security_group_ids    = "${var.vpc_security_group_ids}"
  vpc_subnet_ids            = "${var.vpc_subnet_ids}"
  lambda_memory_size        = "${var.lambda_renew_manager_lambda_memory_size}"
  LOGGER_DSN                = "${var.LOGGER_DSN}"
}


data "aws_caller_identity" "current" {}

# This is duplicated from the Lambda module directory. It's ok.
data "aws_secretsmanager_secret_version" "sentry_dsn" {
  secret_id = "${var.environment}/lambda-renew-manager/SENTRY_DSN"
}

variable "vpc_name_tag" {
  type = map(any)
  default = {
    dev  = "dev"
    qa   = "prod"
    prod = "prod"
  }
}

data "aws_vpc" "main" {
  tags = {
    Name = var.vpc_name_tag[var.environment]
  }
}
data "aws_iam_policy_document" "fargate_renew_manager_policy" {
  statement {
    actions = [
      "sqs:GetQueueAttributes",
      "sqs:GetQueueUrl",
      "sqs:ListQueueTags",
      "sqs:ListQueues",
      "sqs:TagQueue",
      "sqs:UntagQueue"
    ]

    resources = [
      "arn:aws:sqs:*",
    ]
  }

  statement {
    actions = [
      "lambda:InvokeFunction",
    ]

    resources = [
      "arn:aws:lambda:us-east-1:${data.aws_caller_identity.current.account_id}:function:lambda-renew-${var.environment}"
    ]
  }
}

# Create renew manager IAM policy
resource "aws_iam_policy" "fargate_renew_manager_policy" {
  name   = "${var.environment}-renew-manager-fargate-policy"
  policy = data.aws_iam_policy_document.fargate_renew_manager_policy.json
}

module "renew_manager_fargate_environment" {
  source = "git@github.com:theorchard/terraform-fargate.git//"

  environment                      = "${var.environment}"
  application_family               = "vactor"
  service_name                     = "lambda-renew-manager"
  aws_region                       = "us-east-1"
  commit_sha                       = "latest"
  container_port                   = "8080"
  task_type                        = "worker"
  desired_task_count               = 0
  task_cpu                         = 1024
  task_memory                      = 2048
  maximum_capacity                 = 1
  minimum_capacity                 = 0
  vpc_id                           = data.aws_vpc.main.id
  cloudwatch_event_enabled         = true
  cloudwatch_event_schedule        = "rate(1 minutes)"

  iam_managed_policy_attachments = [
    aws_iam_policy.fargate_renew_manager_policy.arn
  ]

  fargate_service_subnets = [
    "subnet-067a6b45b079d7296",
    "subnet-043d235081c966332",
  ]

  environment_variables = [
    {
      Environment = "${var.environment}"
    },
    {
      LOGGER_DSN = "${var.LOGGER_DSN}"
    },
    {
      SENTRY_DSN = "${data.aws_secretsmanager_secret_version.sentry_dsn.secret_string}"
    },
  ]
}
