provider "aws" {
  region = var.aws_region
}

# Terraform backends cannot contain interpolations
terraform {
  backend "s3" {
    bucket  = "orcd-terraform-state"
    key     = "prod/iam/switch-role-dashboard/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}

locals {
  dashboard_body = {
    widgets = [for idx, tile in local.mappings_by_line :
      {
        height = 6
        width  = 6
        properties = {
          markdown = "\n### ${tile.account_title}\n\n| Role | Account | Action |\n| --- | --- | --- |\n${join("\n", [
            for role in tile.roles :
            "| ${role.display_name} | ${tile.account_id}| [button:primary:Switch Role](https://signin.aws.amazon.com/switchrole?roleName=${role.role_name}&account=${tile.account_id}&displayName=${role.display_name}%20@%20${tile.account_id}) |"
          ])}\n"
        }
        type = "text"
        x    = (idx % 4) * 6
        y    = floor(idx / 4) * 6
      }
    ]
  }
}

resource "aws_cloudwatch_dashboard" "switch_role" {
  dashboard_name = "SwitchRole"
  dashboard_body = jsonencode(local.dashboard_body)
}
