# This test case is intended to cover many of the main formatting
# rules of "terraform fmt" at once. It's fine to add new stuff in
# here, but you can also add other _in.tf/_out.tf pairs in the
# same directory if you want to test something complicated that,
# for example, requires specific nested context.
#
# The input file of this test intentionally has strange whitespace
# alignment, because the goal is to see the fmt command fix it.
# If you're applying batch formatting to all .tf files in the
# repository (or similar), be sure to skip this one to avoid
# invalidating the test.

terraform {
  required_providers {
    foo = { version = "1.0.0" }
    barbaz = {
      version = "2.0.0"
    }
  }
}

variable "instance_type" {

}

resource "foo_instance" "foo" {
  instance_type = var.instance_type
}

resource "foo_instance" "bar" {
  instance_type = "${var.instance_type}-2"
}

resource "foo_instance" "baz" {
  instance_type = "${var.instance_type}${var.instance_type}"

  beep "boop" {}
  beep "blep" {
    thingy = var.instance_type
  }
}

provider "" {
}

locals {
  name = (contains(["foo"], var.my_var) ? "${var.my_var}-bar" :
    contains(["baz"], var.my_var) ? "baz-${var.my_var}" :
  file("ERROR: unsupported type ${var.my_var}"))
  wrapped = (var.my_var == null ? 1 :
    var.your_var == null ? 2 :
  3)
}
