terraform {
  backend "s3" {
    bucket  = "orcd-terraform-state"
    key     = "prod/fivetran/royalty-accounting/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}

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

provider "aws" {
  region  = "us-east-1"
  alias   = "accounting-qa"
  profile = "accounting-qa"
}

data "fivetran_group" "prod_warehouse" {
    id = "gentry_invitro"
}

data "aws_rds_cluster" "qa_royalty_accounting" {
  provider = aws.accounting-qa
  cluster_identifier = "qa-royalty-accounting"
}

data "aws_rds_cluster" "prod_royalty_accounting" {
  cluster_identifier = "prod-royalty-accounting"
}

resource "fivetran_connector" "qa_royalty_accounting_connector" {
  group_id               = data.fivetran_group.prod_warehouse.id
  service                = "aurora"
  data_delay_sensitivity = "CUSTOM"
  data_delay_threshold   = 60

  destination_schema {
    prefix = "qa_royalty_accounting"
  }

  config {
    host             = data.aws_rds_cluster.qa_royalty_accounting.endpoint
    port             = data.aws_rds_cluster.qa_royalty_accounting.port
    connection_type  = "SshTunnel"
    user             = "fivetran"
    database         = "royalty_accounting"
    tunnel_host      = "uat-fivetran.qa-accounting.theorchard.io"
    tunnel_port      = "2222"
    tunnel_user      = "fivetran"
    update_method    = "TELEPORT"
  }
}

resource "fivetran_connector_schema_config" "qa_royalty_accounting_connector" {
  connector_id           = fivetran_connector.qa_royalty_accounting_connector.id
  schema_change_handling = "ALLOW_COLUMNS"
  schemas = {
    "royalty_accounting" = {
      enabled = true
      tables = { for table in var.qa_royalty_accounting_tables_to_sync_to_snowflake : table => {
        enabled   = true
        sync_mode = "SOFT_DELETE"
      }}
    }
  }
}

resource "fivetran_connector_schedule" "qa_royalty_accounting_schedule" {
  connector_id      = fivetran_connector.qa_royalty_accounting_connector.id
  sync_frequency    = 1
  pause_after_trial = false
}

# PROD_ROYALTY_ACCOUNTING_CONTRACT_ROYALTY_ACCOUNTING
resource "fivetran_connector" "prod_royalty_accounting_contract_connector" {
  group_id = data.fivetran_group.prod_warehouse.id
  service  = "aurora"

  destination_schema {
    prefix = "prod_royalty_accounting_contract"
  }

  config {
    host                   = data.aws_rds_cluster.prod_royalty_accounting.endpoint
    port                   = data.aws_rds_cluster.prod_royalty_accounting.port
    connection_type        = "SshTunnel"
    user                   = "fivetran_contract"
    database               = "royalty_accounting"
    tunnel_host            = "fivetran.theorchard.io"
    tunnel_port            = "2222"
    tunnel_user            = "fivetran"
    update_method          = "TELEPORT"
  }
}

resource "fivetran_connector_schedule" "prod_royalty_accounting_contract" {
  connector_id      = fivetran_connector.prod_royalty_accounting_contract_connector.id
  sync_frequency    = 1
  pause_after_trial = false
}

resource "fivetran_connector_schema_config" "prod_royalty_accounting_contract_connector" {
  connector_id           = fivetran_connector.prod_royalty_accounting_contract_connector.id
  schema_change_handling = "ALLOW_COLUMNS"
  schemas = {
    "royalty_accounting" = {
      enabled = true
      tables = { for table in var.prod_royalty_accounting_contract_tables_to_sync_to_snowflake : table => {
        enabled   = true
        sync_mode = "SOFT_DELETE"
      }}
    }
  }
}

resource "fivetran_connector" "prod_royalty_accounting_connector" {
  group_id = data.fivetran_group.prod_warehouse.id
  service  = "aurora"

  destination_schema {
    prefix = "prod_royalty_accounting"
  }

  config {
    host             = data.aws_rds_cluster.prod_royalty_accounting.endpoint
    port             = data.aws_rds_cluster.prod_royalty_accounting.port
    connection_type  = "SshTunnel"
    user             = "fivetran"
    database         = "royalty_accounting"
    tunnel_host      = "fivetran.theorchard.io"
    tunnel_port      = "2222"
    tunnel_user      = "fivetran"
    update_method    = "BINLOG"
  }
}

resource "fivetran_connector_schedule" "prod_royalty_accounting" {
  connector_id      = fivetran_connector.prod_royalty_accounting_connector.id
  sync_frequency    = 1
  pause_after_trial = false
}

resource "fivetran_connector_schema_config" "prod_royalty_accounting_connector" {
  connector_id           = fivetran_connector.prod_royalty_accounting_connector.id
  schema_change_handling = "ALLOW_COLUMNS"
  schemas = {
    "royalty_accounting" = {
      enabled = true
      tables = { for table in var.prod_royalty_accounting_tables_to_sync_to_snowflake : table => {
        enabled   = true
        sync_mode = "SOFT_DELETE"
      }}
    }
    "sys" = {
      enabled = true
      tables = {
        "sys_config" = {
          enabled   = true
          sync_mode = "SOFT_DELETE"
        }
      }
    }
  }
}
