provider "aws" {
  region = var.aws_region
}

terraform {
  backend "s3" {
    bucket  = "prod-royaltyshare-terraform-state"
    key     = "prod/fivetran/terraform.tfstate"
    region  = "us-west-2"
    encrypt = "true"
  }
}

data "aws_lb" "fivetran_proxy_lb" {
  name = "fivetran-proxy"
}

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

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

  destination_schema {
    prefix = "royaltyshare"
  }

  config {
    host             = "172.31.130.4"
    port             = "3306"
    user             = "fivetran"
    database         = var.mysql_database
    tunnel_host      = data.aws_lb.fivetran_proxy_lb.dns_name
    tunnel_port      = "2222"
    tunnel_user      = "fivetran"
  }
}

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

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

  config {
    auth            = "KEY_PAIR"
    host            = "delphi.us-east-1.snowflakecomputing.com"
    port            = 443
    user            = "PROD_FIVETRAN_ROYALTYSHARE"
    role            = "PROD_FIVETRAN_ROYALTYSHARE"
    database        = "ROYALTYSHARE"
    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 = {
    "C_CLEOPATRA_RECORDS" = {
      tables = { for table_name in var.cleopatra_enabled_tables : table_name => {
        enabled = true
        sync_mode = "SOFT_DELETE"
      }}
      enabled = true
    }
    "C_RSTEST" = {
      tables = { for table_name in var.rstest_enabled_tables : table_name => {
        enabled = true
        sync_mode = "SOFT_DELETE"
      }}
      enabled = true
    }
  }
}
