locals {
  # Level 1 items are the top-level components visitors see on the status page.
  # "Surface" is the Level 1 name in this example, so these become its Surfaces.
  level_1_items = {
    buyer_journey       = { name = "Buyer Journey", slug = "buyer-journey", display_order = 1 }
    seller_journey      = { name = "Seller Journey", slug = "seller-journey", display_order = 2 }
    platform_operations = { name = "Platform Operations", slug = "platform-operations", display_order = 3 }
  }

  # Level 2 items appear beneath a Level 1 item. The level_1_key links each
  # Capability to one of the Level 1 items above without copying StatiBeat IDs.
  level_2_items = {
    checkout                    = { level_1_key = "buyer_journey", name = "Checkout", slug = "buyer-checkout", display_order = 1 }
    discovery                   = { level_1_key = "buyer_journey", name = "Discovery", slug = "buyer-discovery", display_order = 2 }
    buyer_payment_authorization = { level_1_key = "buyer_journey", name = "Payment Authorization", slug = "buyer-payment-authorization", display_order = 3 }
    buyer_fraud_screening       = { level_1_key = "buyer_journey", name = "Fraud Screening", slug = "buyer-fraud-screening", display_order = 4 }
    buyer_search                = { level_1_key = "buyer_journey", name = "Search", slug = "buyer-search", display_order = 5 }
    customer_notifications      = { level_1_key = "buyer_journey", name = "Customer Notifications", slug = "customer-notifications", display_order = 6 }

    listings            = { level_1_key = "seller_journey", name = "Listings", slug = "seller-listings", display_order = 1 }
    seller_media_intake = { level_1_key = "seller_journey", name = "Media Intake", slug = "seller-media-intake", display_order = 2 }
    seller_image_pipeline = {
      level_1_key   = "seller_journey"
      name          = "Image Pipeline"
      slug          = "seller-image-pipeline"
      display_order = 3
    }
    inventory_sync = { level_1_key = "seller_journey", name = "Inventory Sync", slug = "inventory-sync", display_order = 4 }
    seller_payouts = { level_1_key = "seller_journey", name = "Seller Payouts", slug = "seller-payouts", display_order = 5 }

    platform_payment_gateway = { level_1_key = "platform_operations", name = "Payment Gateway", slug = "platform-payment-gateway", display_order = 1 }
    platform_risk_engine     = { level_1_key = "platform_operations", name = "Risk Engine", slug = "platform-risk-engine", display_order = 2 }
    platform_search_cluster  = { level_1_key = "platform_operations", name = "Search Cluster", slug = "platform-search-cluster", display_order = 3 }
    order_events             = { level_1_key = "platform_operations", name = "Order Event Bus", slug = "order-event-bus", display_order = 4 }
  }
}

# Hierarchy levels define the customer-facing names for each depth. In the
# StatiBeat admin UI this makes Level 1 read "Surface" / "Surfaces".
resource "statuspage_hierarchy_level" "level_1" {
  depth         = 1
  singular_name = "Surface"
  plural_name   = "Surfaces"
}

# Level 2 is nested under Level 1 and is called "Capability" in this page.
resource "statuspage_hierarchy_level" "level_2" {
  depth         = 2
  singular_name = "Capability"
  plural_name   = "Capabilities"

  depends_on = [statuspage_hierarchy_level.level_1]
}

# Each entry in local.level_1_items becomes a monitored Level 1 component.
# external_id is the stable Terraform identity used to match future applies.
resource "statuspage_hierarchy_item" "level_1_items" {
  for_each = local.level_1_items

  external_id   = "marketplace-level-1-${each.key}"
  depth         = 1
  name          = each.value.name
  slug          = each.value.slug
  display_order = each.value.display_order

  depends_on = [statuspage_hierarchy_level.level_1]
}

# Each Level 2 item resolves its parent from the matching Level 1 Terraform key.
resource "statuspage_hierarchy_item" "level_2_items" {
  for_each = local.level_2_items

  external_id   = "marketplace-level-2-${each.key}"
  depth         = 2
  parent_id     = statuspage_hierarchy_item.level_1_items[each.value.level_1_key].id
  name          = each.value.name
  slug          = each.value.slug
  display_order = each.value.display_order

  depends_on = [statuspage_hierarchy_level.level_2]
}
