resource "aws_iam_user" "pass_as_engineer" {
  name = "dbarnett"

  tags = {
    role    = "tech"
    name    = "Darren Barnett"
    email   = "darren.barnett@example.com"
    company = "placeholder"
    manager = "placeholder"
  }
}

resource "aws_iam_user" "pass_as_service_user" {
  name = "dbarnett"

  tags = {
    role = "service-user"
  }
}

resource "aws_iam_user" "fail_without_tags" {
  name = "dbarnett"
}

resource "aws_iam_user" "fail_without_role_tag" {
  name = "dbarnett"

  tags = {
    name  = "Darren Barnett"
    email = "darren.barnett@example.com"
  }
}

resource "aws_iam_user" "fail_on_empty_role_tag" {
  name = "dbarnett"

  tags = {
    role  = ""
    name  = "Darren Barnett"
    email = "darren.barnett@example.com"
  }
}

resource "aws_iam_user" "fail_on_wrong_role_tag" {
  name = "dbarnett"

  tags = {
    role  = "placeholder"
    name  = "Darren Barnett"
    email = "darren.barnett@example.com"
  }
}

resource "aws_iam_user" "fail_without_engineer_tags" {
  name = "dbarnett"

  tags = {
    role  = "tech"
    name  = "Darren Barnett"
    email = "darren.barnett@example.com"
  }
}

#---

resource "aws_iam_user" "pass_users_in_bulk" {
  for_each = { for user in var.user_list_to_pass : user.username => user }

  name = each.value.username

  tags = {
    role    = each.value.role
    name    = each.value.name
    email   = each.value.email
    company = each.value.company
    manager = each.value.manager
  }
}

variable "user_list_to_pass" {
  type = list(object({
    username = string
    role     = string
    name     = string
    email    = string
    company  = string
    manager  = string
  }))

  default = [
    {
      username = "nhale",
      role     = "infosec",
      name     = "Nathaniel Hale",
      email    = "nathaniel.hale@example.com",
      company  = "placeholder",
      manager  = "placeholder",
    },
    {
      username = "jalvarez",
      role     = "business",
      name     = "Jennie Alvarez",
      email    = "jennie.alvarez@example.com",
      company  = "placeholder",
      manager  = "placeholder",
    },
  ]
}

#---

resource "aws_iam_user" "fail_users_in_bulk" {
  for_each = { for user in var.user_list_to_fail : user.username => user }

  name = each.value.username

  tags = {
    role    = each.value.role
    name    = each.value.name
    email   = each.value.email
    company = each.value.company
    manager = each.value.manager
  }
}

variable "user_list_to_fail" {
  type = list(object({
    username = string
    role     = string
    name     = string
    email    = string
    company  = string
    manager  = string
  }))

  default = [
    {
      username = "nhale",
      name     = "Nathaniel Hale",
      email    = "nathaniel.hale@example.com",
    },
    {
      username = "jalvarez",
      role     = "manager",
      name     = "Jennie Alvarez",
      email    = "jennie.alvarez@example.com",
    },
  ]
}
