provider "aws" {
  region = var.aws_region
}

terraform {
  backend "s3" {
    bucket  = "prod-aoma-core-terraform-state"
    key     = "prod/fivetran/terraform.tfstate"
    region  = "eu-central-1"
    encrypt = "true"
  }
}

resource "fivetran_group" "group" {
  name = "${upper(var.environment)}_AOMA"
}

data "aws_db_instance" "aoma_instance" {
  db_instance_identifier = "aoma-rds-prod"
}

resource "fivetran_connector" "connector" {
  group_id = fivetran_group.group.id
  service  = "postgres_rds"

  destination_schema {
    prefix = "aoma"
  }

  config {
    host             = data.aws_db_instance.aoma_instance.address
    port             = data.aws_db_instance.aoma_instance.port
    user             = "fivetran"
    database         = "aoma"
    tunnel_host      = "fivetran-proxy-e898ad65916d408b.elb.eu-central-1.amazonaws.com"
    tunnel_port      = "2222"
    tunnel_user      = "fivetran"
    update_method    = "WAL_PGOUTPUT"
    replication_slot = "snowflake_fivetran"
    publication_name = "pub_tables_for_snowflake"
  }
}

resource "fivetran_connector_schedule" "connector_schedule" {
  connector_id   = fivetran_connector.connector.id
  sync_frequency = 60
}

resource "fivetran_destination" "destination" {
  group_id         = fivetran_group.group.id
  service          = "snowflake"
  time_zone_offset = "0"
  region           = "AWS_EU_CENTRAL_1"
  run_setup_tests  = "true"

  config {
    auth            = "KEY_PAIR"
    host            = "delphi.us-east-1.snowflakecomputing.com"
    port            = 443
    user            = "PROD_FIVETRAN_AOMA"
    database        = "AOMA_APP_REPORTING"
    connection_type = "Directly"
    private_key     = "dummy"
  }

  lifecycle {
    ignore_changes = [
      config.private_key
    ]
  }
}

resource "fivetran_connector_schema_config" "schema" {
  connector_id           = fivetran_connector.connector.id
  schema_change_handling = "ALLOW_COLUMNS"
  schemas = {
    "amp" = {
      tables = { for table_name in var.amp_enabled_tables : table_name => {
        enabled   = true
        sync_mode = "SOFT_DELETE"
      } }
      enabled = true
    }
    "aoma" = {
      tables = { for table_name in var.aoma_enabled_tables : table_name => {
        enabled   = true
        sync_mode = "SOFT_DELETE"
      } }
      enabled = true
    }
    "exports" = {
      tables = { for table_name in var.exports_enabled_tables : table_name => {
        enabled   = true
        sync_mode = "SOFT_DELETE"
      } }
      enabled = true
    }
    "metadata_publisher" = {
      tables = {
        for table_name in var.metadata_publisher_enabled_tables : table_name => {
          enabled   = true
          sync_mode = "SOFT_DELETE"
        }
      }
      enabled = true
    }
  }
}
