variable "topics" {
  description = "Map of SNS topic definitions"
  type = map(object({
    name                        = string
    display_name                = optional(string, null)
    fifo_topic                  = optional(bool, false)
    content_based_deduplication = optional(bool, false)
    kms_master_key_id           = optional(string, null)
    delivery_policy             = optional(string, null)
    signature_version           = optional(number, 1)
    tracing_config              = optional(string, "PassThrough")
    archive_policy              = optional(string, null)

    # Feedback logging IAM roles per protocol
    application_success_feedback_role_arn    = optional(string, null)
    application_failure_feedback_role_arn    = optional(string, null)
    application_success_feedback_sample_rate = optional(number, null)
    http_success_feedback_role_arn           = optional(string, null)
    http_failure_feedback_role_arn           = optional(string, null)
    http_success_feedback_sample_rate        = optional(number, null)
    lambda_success_feedback_role_arn         = optional(string, null)
    lambda_failure_feedback_role_arn         = optional(string, null)
    lambda_success_feedback_sample_rate      = optional(number, null)
    sqs_success_feedback_role_arn            = optional(string, null)
    sqs_failure_feedback_role_arn            = optional(string, null)
    sqs_success_feedback_sample_rate         = optional(number, null)
    firehose_success_feedback_role_arn       = optional(string, null)
    firehose_failure_feedback_role_arn       = optional(string, null)
    firehose_success_feedback_sample_rate    = optional(number, null)
  }))
  default = {}
}

variable "topic_policies" {
  description = "Map of SNS topic policy definitions keyed by topic key"
  type = map(object({
    policy = string
  }))
  default = {}
}

variable "subscriptions" {
  description = "Map of SNS subscription definitions"
  type = map(object({
    topic_key                       = string
    protocol                        = string
    endpoint                        = string
    raw_message_delivery            = optional(bool, false)
    filter_policy                   = optional(string, null)
    filter_policy_scope             = optional(string, "MessageAttributes")
    redrive_policy                  = optional(string, null)
    delivery_policy                 = optional(string, null)
    confirmation_timeout_in_minutes = optional(number, 1)
    endpoint_auto_confirms          = optional(bool, false)
  }))
  default = {}
}

variable "data_protection_policies" {
  description = "Map of SNS data protection policy definitions keyed by topic key"
  type = map(object({
    policy = string
  }))
  default = {}
}

variable "tags" {
  description = "Resource tags to apply to all resources"
  type        = map(string)
  default     = {}
}
