module "aws_accounts_list" {
  source = "../../../modules/iam/aws_accounts_list"
}

resource "snowflake_storage_integration" "main" {
  name    = upper("${var.env}_${var.platform}_s3")
  comment = "Main integration for ${var.env} env of ${var.platform}"
  type    = "EXTERNAL_STAGE"
  enabled = true

  storage_allowed_locations = [
    "s3://${var.env}-delphi-exploration/",
    "s3://${var.env}-sme-data-decompressed/",
    "s3://${var.env}-delphi-public-data-etl-export/",
    "s3://${var.env}-delphi-private-data-etl-export/",
    "s3://${var.env}-delphi-decibel/",
    "s3://${var.env}-delphi-databricks-tests/",
    "s3://${var.env}-delphi-notifications/",
    "s3://${var.env}-delphi-import/",
    "s3://${var.env}-delphi-incoming/",
    "s3://${var.env}-delphi-outgoing/",
    "s3://${var.env}-delphi-chartmetric/",
    "s3://${var.env}-sme-data-archive/",
    "s3://${var.env}-delphi-whitelist-db/",
    "s3://${var.env}-delphi-youtube-ugc-export/",
    "s3://${var.env}-delphi-spotify-juno-export/",
    "s3://${var.env}-delphi-market-size-export/",
    "s3://${var.env}-delphi-playlist-notifications/",
    "s3://${var.env}-delphi-crm/",
  ]

  storage_provider     = "S3"
  storage_aws_role_arn = "arn:aws:iam::${module.aws_accounts_list.accounts["gdb-delphi-dev"]}:role/${var.env}-${var.platform}-snowflake_role"
}

resource "snowflake_integration_grant" "main_grants" {
  integration_name = snowflake_storage_integration.main.name

  privilege = "USAGE"
  roles     = ["SYSADMIN"]

  with_grant_option = false
}

resource "snowflake_storage_integration" "crm" {
  name    = upper("${var.env}_crm")
  comment = "Ecommerce team integration for ${var.env} env"
  type    = "EXTERNAL_STAGE"
  enabled = true

  storage_allowed_locations = [
    "s3://${var.env}-crm-ecommerce-data/",
  ]

  storage_provider     = "S3"
  storage_aws_role_arn = "arn:aws:iam::${module.aws_accounts_list.accounts["gdb-prodhub-dev"]}:role/${var.env}-ecommerce-crm_snowflake_role"
}

resource "snowflake_integration_grant" "crm_grants" {
  integration_name = snowflake_storage_integration.crm.name

  privilege = "USAGE"
  roles     = ["FIVETRAN_PRIME", "FIVETRAN_ROLE"]

  with_grant_option = false
}

resource "snowflake_storage_integration" "apollo" {
  name    = upper("${var.env}_apollo")
  comment = "Apollo team integration for ${var.env} env"
  type    = "EXTERNAL_STAGE"
  enabled = true

  storage_allowed_locations = [
    "s3://dev-apollo-load-playlists-tracks-history/",
  ]

  storage_provider     = "S3"
  storage_aws_role_arn = "arn:aws:iam::${module.aws_accounts_list.accounts["gdb-delphi-dev"]}:role/${var.env}-${var.platform}-apollo_snowflake_role"
}

resource "snowflake_integration_grant" "apollo_grants" {
  integration_name = snowflake_storage_integration.apollo.name

  privilege = "USAGE"
  roles     = ["SYSADMIN", "APOLLO_TEAM_ROLE"]

  with_grant_option = false
}
