provider "aws" {
  region = var.aws_region
}

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

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

data "aws_db_instance" "eom_instance" {
  db_instance_identifier = "dbopmipr"
}

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

  destination_schema {
    prefix = "eom"
  }

  config {
    host        = data.aws_db_instance.eom_instance.address
    port        = data.aws_db_instance.eom_instance.port
    user        = "fivetran"
    database    = "dbopmipr"
    tunnel_host = "fivetran-proxy-7d672907074b89a5.elb.eu-central-1.amazonaws.com"
    tunnel_port = "2222"
    tunnel_user = "fivetran"
  }
}

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_EOM"
    database        = "EOM_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 = {
    for schema_name in var.enabled_schemas : schema_name => {
      enabled = true
    }
  }

  lifecycle {
    ignore_changes = [
      # Allow manual enabling of tables in Fivetran without causing diffs in Terraform
      schemas["CSR"].tables,
      schemas["DRA"].tables,
      schemas["DRA_PROC"].tables,
      schemas["EAI_CLIENT"].tables,
      schemas["EOM"].tables,
      schemas["EOM_CAT"].tables,
      schemas["EOM_CAT10"].tables,
      schemas["EOM_CAT4"].tables,
      schemas["EOM_CAT8"].tables,
      schemas["EOM_CAT9"].tables,
      schemas["EOM_PROC"].tables,
      schemas["META_ARTIST"].tables,
      schemas["META_MEAD"].tables,
      schemas["MI_LOAD"].tables,
      schemas["MI2"].tables,
      schemas["MI2_CARMA"].tables,
      schemas["MI2_PROC"].tables,
      schemas["OH_DEL"].tables,
      schemas["OMS_ASSET"].tables,
      schemas["OMS_PUB"].tables,
      schemas["OMS_SUB"].tables,
      schemas["SBME"].tables,
    ]
  }
}
