# Organizational Units (supports upto 3 levels nested OUs) ---------------------

# Level 1 OUs ------------------------------------------------------------------
# Directly under Root. parent_key must be 'root' in the OU definition.

resource "aws_organizations_organizational_unit" "level1" {
  for_each = local.level1_ous

  name      = each.value.name
  parent_id = var.root_id
  tags      = local.ou_tags[each.key]

  lifecycle {
    prevent_destroy = true
  }
}

# Level 2 OUs ------------------------------------------------------------------
# One level below level 1 OUs. parent_key references a key in local.level1_ous.

resource "aws_organizations_organizational_unit" "level2" {
  for_each = local.level2_ous

  name      = each.value.name
  parent_id = aws_organizations_organizational_unit.level1[each.value.parent_key].id
  tags      = local.ou_tags[each.key]

  depends_on = [aws_organizations_organizational_unit.level1]

  lifecycle {
    prevent_destroy = true
  }
}

# Level 3 OUs ------------------------------------------------------------------
# One level below level 2 OUs. parent_key references a key in local.level2_ous.

resource "aws_organizations_organizational_unit" "level3" {
  for_each = local.level3_ous

  name      = each.value.name
  parent_id = aws_organizations_organizational_unit.level2[each.value.parent_key].id
  tags      = local.ou_tags[each.key]

  depends_on = [aws_organizations_organizational_unit.level2]

  lifecycle {
    prevent_destroy = true
  }
}
