terraform {
  backend "s3" {
    bucket                  = "prod-dna-tfstate"
    key                     = "Delphi/Production/functions/bigtable-backup.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"
    }
    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-backup-0.0.4.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]
}

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-backup"
  description = "Triggers Bigtable backup"
  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}-bigtable-backup"
  }

  entry_point   = "main"
  timeout       = 300
  max_instances = 1

  environment_variables = {
    EXPIRATION_DAYS = var.expiration_days
  }
}
