terraform {
  backend "s3" {
    bucket                  = "prod-dna-tfstate"
    key                     = "Delphi/Production/functions/bigtable-monitoring.tfstate"
    region                  = "us-east-1"
    shared_credentials_file = "~/.aws/credentials"
    profile                 = "gdb-delphi-prod"
    dynamodb_table          = "terraform-state-lock-dynamodb"
  }
  required_providers {
    google = {
      source = "hashicorp/google"
    }
    aws = {
      source = "hashicorp/aws"
    }
    google-beta = {
      source = "hashicorp/google-beta"
    }
    archive = {
      source  = "hashicorp/archive"
      version = "2.2.0"
    }
  }
}

locals {
  region_zones = formatlist("%s-%s", var.gcp_region_id, ["a", "b", "c", "f"])
  project_id   = lower("${var.platform.name}-${var.platform.prefix}")
  name_prefix  = lower("${var.platform.prefix}-${var.platform.name}")
  env_prefix   = lower(var.platform.name)

  archive_path = path.module
  archive_name = "delphi-bigtable-monitoring-0.0.6.zip"

  common_tags = {
    "platform"          = var.platform.name
    "environment"       = var.platform.environment
    "platform_with_env" = "${var.platform.name} ${var.platform.environment}"
    "managed_by"        = "Terraform"
  }
  aggregated_tag = "${var.platform.short_platform_name}_${upper(var.platform.prefix)}"
}

provider "google" {
  project = local.project_id
  zone    = local.region_zones[0]
}

provider "google-beta" {
  project = local.project_id
  zone    = local.region_zones[0]
}

provider "aws" {
  shared_credentials_file = var.aws_shared_credentials_file
  profile                 = var.aws_profile
  region                  = var.aws_region_id
}

data "archive_file" "this" {
  type        = "zip"
  source_dir  = "${path.module}/../"
  output_path = "${local.archive_path}/${local.archive_name}"
  excludes = [
    "infra",
    "venv",
    "README.md",
    "*.zip",
  ]
}

resource "google_storage_bucket_object" "archive" {
  name   = local.archive_name
  bucket = "${local.name_prefix}-lambda-artifacts"
  source = "${local.archive_path}/${local.archive_name}"
}

resource "google_cloudfunctions_function" "function" {
  name        = "${local.name_prefix}-bigtable-monitoring"
  description = "Send event to Datadog"
  runtime     = "python312"

  available_memory_mb   = 128
  source_archive_bucket = "${local.name_prefix}-lambda-artifacts"
  source_archive_object = google_storage_bucket_object.archive.name

  event_trigger {
    event_type = "google.pubsub.topic.publish"
    resource   = "projects/${local.project_id}/topics/${local.name_prefix}-stackdriver-notification"
  }

  entry_point   = "main"
  timeout       = 300
  max_instances = 1

  environment_variables = {
    DD_API_KEY = var.datadog_api_key
  }
}
