terraform {
  backend "s3" {
    bucket  = "orcd-terraform-state"
    key     = "prod/datadog/on-call/content-review/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}

data "datadog_team" "team" {
  filter_keyword = "content-review-management"
}

data "datadog_user" "on_call_team_users" {
  for_each                 = toset(var.on_call_users)
  filter                   = each.value
  exclude_service_accounts = true
}

data "datadog_user" "escalation_users" {
  for_each                 = toset(var.escalation_only_users)
  filter                   = each.value
  exclude_service_accounts = true
}

resource "datadog_on_call_schedule" "schedule" {
  name      = "Content Review On-Call Schedule"
  time_zone = "America/New_York"
  teams     = [data.datadog_team.team.id]

  layer {
    name           = "Layer 1"
    effective_date = "2025-08-07T20:49:03Z"
    rotation_start = "2025-08-04T14:00:00Z"

    interval {
      days    = 7
      seconds = 0
    }

    users = [for user in data.datadog_user.on_call_team_users : user.id]
  }
}

resource "datadog_on_call_escalation_policy" "escalation_policy" {
  name                       = "Content Review Escalation Policy"
  teams                      = [
    data.datadog_team.team.id,
  ]
  resolve_page_on_policy_end = false
  retries                    = 3

  step {
    assignment             = "default"
    escalate_after_seconds = 1800

    target {
      schedule = datadog_on_call_schedule.schedule.id
    }
  }

    step {
    assignment             = "default"
    escalate_after_seconds = 1800

    target {
      user = data.datadog_user.escalation_users["tmartino@sonymusic-pde.com"].id
    }
  }

  step {
    assignment             = "default"
    escalate_after_seconds = 1800

    target {
      user = data.datadog_user.escalation_users["mthomas@sonymusic-pde.com"].id
    }
  }
}

resource "datadog_on_call_team_routing_rules" "routing_rules" {
  id = data.datadog_team.team.id

  rule {
    escalation_policy = datadog_on_call_escalation_policy.escalation_policy.id
    urgency           = "dynamic"
  }
}

resource "datadog_workflow_automation" "jira_critical_on_call_page" {
  name        = "Content Review Jira Critical On-Call Page"
  description = "Creates an OnCall page for the Content Review team when a Jira issue with Critical priority is created or updated"
  tags        = ["source:jira","team:${data.datadog_team.team.handle}","workflow:oncall"]
  published   = true

  spec_json = jsonencode(
    {
      "triggers": [
        {
          "startStepNames": [
            "Check_If_Critical_And_Matching_Project"
          ],
          "apiTrigger": {}
        }
      ],
      "connectionEnvs": [
        {
          "env": "default",
          "connections": [
            {
              "connectionId": "c68dc24b-fb45-4d05-8a4b-17de8a16c14d", # This is the "Content Review Jira Critical On-Call Page Workflow Automation" connection for Datadog Automation Actions
              "label": "INTEGRATION_DATADOG"
            }
          ]
        }
      ],
      "inputSchema": {
        "parameters": [
          {
            "name": "issue",
            "label": "Issue",
            "description": "The Jira issue object from the webhook payload",
            "type": "OBJECT"
          },
          {
            "name": "user",
            "label": "User",
            "description": "User info from the Jira webhook payload",
            "type": "OBJECT"
          },
          {
            "name": "timestamp",
            "label": "Timestamp",
            "description": "The timestamp of the Jira issue from the webhook payload",
            "type": "STRING"
          }
        ]
      },
      "steps": [
        {
          "name": "Check_If_Critical_And_Matching_Project",
          "actionId": "com.datadoghq.core.if",
          "parameters": [
            {
              "name": "conditions",
              "value": [
                {
                  "comparisonOperator": "eq",
                  "leftValue": "{{ Trigger.issue.fields.priority.name }}",
                  "rightValue": "Critical"
                },
                {
                  "comparisonOperator": "eq",
                  "leftValue": "{{ Trigger.issue.fields.project.name }}",
                  "rightValue": "Content Review"
                }
              ]
            },
            {
              "name": "joinOperator",
              "value": "and"
            }
          ],
          "outboundEdges": [
            {
              "nextStepName": "Create_OnCall_Page",
              "branchName": "true"
            }
          ],
          "display": {
            "bounds": {
              "x": -240,
              "y": 276
            }
          }
        },
        {
          "name": "Create_OnCall_Page",
          "actionId": "com.datadoghq.dd.oncall.createOnCallPage",
          "connectionLabel": "INTEGRATION_DATADOG",
          "parameters": [
            {
              "name": "description",
              "value": "Description: {{ Trigger.issue.fields.description }}\nURL: {{ Trigger.issue.fields.url }}\nReporter: {{ Trigger.user.displayName }} ({{ Trigger.user.emailAddress }})\nTimestamp: {{ Trigger.timestamp }}"
            },
            {
              "name": "tags",
              "value": [
                "source: jira",
                "issue_number: {{ Trigger.issue.key }}",
                "team:${data.datadog_team.team.handle}"
              ]
            },
            {
              "name": "target",
              "value": {
                "identifier": "${data.datadog_team.team.handle}",
                "type": "team_handle"
              }
            },
            {
              "name": "title",
              "value": "{{ Trigger.issue.fields.summary }}"
            },
            {
              "name": "urgency",
              "value": "high"
            }
          ],
          "display": {
            "bounds": {
              "x": -384,
              "y": 624
            }
          }
        }
      ]
    }
  )
}
