terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~>3.0"
    }
  }
  backend "azurerm" {}
}

provider "azurerm" {
  features {}
}

variable "env" {
  type = string
}

variable "location" {
  type = string
}

variable "eks_oidc_issuer" {
  type = string
}

# global shared microservice namespace
# dev: nightly-ms
# staging: staging-ms
# prod: prod-ms
variable "ms_namespace" {
  type = string
}

variable "dataplane_subscriptions" {
  type = list(string)
}

resource "azurerm_resource_group" "rg" {
  name     = "${var.env}-global-service-rg"
  location = var.location
}

module "dataflow-service" {
  source = "../modules/global"

  location            = var.location
  resource_group_name = azurerm_resource_group.rg.name
  managed_identity    = "dataflow-service"

  eks_oidc_issuer = var.eks_oidc_issuer
  namespace       = var.ms_namespace
  service_account = "central"
}

resource "azurerm_role_assignment" "dataflow_service_role_assignment" {
  for_each = toset(var.dataplane_subscriptions)
  scope    = "/subscriptions/${each.key}"

  role_definition_name = "Storage Account Contributor"
  principal_id         = module.dataflow-service.principal_id
}

output "dataflow_service_principal_id" {
  value = module.dataflow-service.principal_id
}

output "dataflow_service_client_id" {
  value = module.dataflow-service.client_id
}
