terraform {
  backend "s3" {
    bucket  = "qa-fansifter-terraform-state"
    key     = "qa/kafka-cluster/topics/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}

provider "kafka" {
  bootstrap_servers = var.bootstrap_servers
  tls_enabled       = true
}

# Songwhip topics
resource "kafka_topic" "event_songwhip_presave_raw_topic" {
  name               = "event.songwhip.presave.raw"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "max.message.bytes" = "15728640"
    "retention.ms"      = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "event_songwhip_presave_processed_topic" {
  name               = "event.songwhip.presave.processed"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "max.message.bytes" = "15728640"
    "retention.ms"      = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "event_songwhip_fan_consent_topic" {
  name               = "event.songwhip.fan.consent"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "max.message.bytes" = "15728640"
    "retention.ms"      = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "event_songwhip_fan_consent_double_opt_in_topic" {
  name               = "event.songwhip.fan.consent.doubleOptIn"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "max.message.bytes" = "15728640"
    "retention.ms"      = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "event_songwhip_page_unlock_topic" {
  name               = "event.songwhip.page.unlock"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "max.message.bytes" = "15728640"
    "retention.ms"      = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "event_songwhip_guardian_review_topic" {
  name               = "event.songwhip.guardian.review"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "max.message.bytes" = "15728640"
    "retention.ms"      = tostring(var.kafka_default_retention_ms)
  }
}

# Preference Center topics
resource "kafka_topic" "cdc_preference_center_fan_updates" {
  name               = "cdc.preferenceCenter.fanUpdates"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "cdc_preference_center_fan_updates_dlq" {
  name               = "dlq.preferenceCenter.fanUpdates"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "event_ows_preference_center_fan_update" {
  name               = "event.owsPreferenceCenter.fanUpdate"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "event_ows_preference_center_fan_delete" {
  name               = "event.owsPreferenceCenter.fanDelete"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "event_ows_preference_center_subscriptions_update" {
  name               = "event.owsPreferenceCenter.subscriptionsUpdate"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "event_ows_preference_center_fan_subscriptions_update" {
  name               = "event.owsPreferenceCenter.fanSubscriptionsUpdate"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "cdc_preference_center_subscription_updates" {
  name               = "cdc.preferenceCenter.subscriptionUpdates"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "dlq_ows_preference_center_fan_subscriptions_update" {
  name               = "dlq.owsPreferenceCenter.fanSubscriptionsUpdate"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "cdc_preference_center_fan_subscription_updates" {
  name               = "cdc.preferenceCenter.fanSubscriptionUpdates"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = tostring(var.kafka_default_retention_ms)
  }
}

# Sendgrid topics
resource "kafka_topic" "event_sendgrid_webhook_general_topic" {
  name               = "event.sendgrid.webhook.general"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "max.message.bytes" = "5242880"
    "retention.ms"      = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "event_sendgrid_webhook_inbound_topic" {
  name               = "event.sendgrid.webhook.inbound"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "max.message.bytes" = "5242880"
    "retention.ms"      = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "event_sendgrid_webhook_fan_response_topic" {
  name               = "event.sendgrid.webhook.fanResponse"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "max.message.bytes" = "5242880"
    "retention.ms"      = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "event_ows_url_shortener_click_topic" {
  name               = "event.owsUrlShortener.click"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "max.message.bytes" = "5242880"
    "retention.ms"      = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "event_twilio_webhook_outbound_topic" {
  name               = "event.twilio.webhook.outbound"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "max.message.bytes" = "5242880"
    "retention.ms"      = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "event_twilio_webhook_inbound_topic" {
  name               = "event.twilio.webhook.inbound"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "max.message.bytes" = "5242880"
    "retention.ms"      = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "event_twilio_message_send_topic" {
  name               = "event.twilio.message.send"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "max.message.bytes" = "5242880"
    "retention.ms"      = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "event_twilio_fan_subscription_status_update_topic" {
  name               = "event.twilio.fan.subscriptionStatusUpdate"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "max.message.bytes" = "5242880"
    "retention.ms"      = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "event_ows_preference_center_double_opt_in_confirmation" {
  name               = "event.owsPreferenceCenter.doubleOptInConfirmation"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = tostring(var.kafka_default_retention_ms)
  }
}

# Triggered sends topics

resource "kafka_topic" "event_triggered_send_batch" {
  name               = "event.triggeredSendBatch"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "event_triggered_send_batch_failed" {
  name               = "event.triggeredSendBatch.failed"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = tostring(var.kafka_default_retention_ms)
  }
}

resource "kafka_topic" "event_triggered_send_batch_dlq" {
  name               = "dlq.triggeredSendBatch"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = 2592000000
  }
}

# Resonance Engine topics
resource "kafka_topic" "event_resonance_engine_fan_profile" {
  name               = "event.resonanceEngine.fanProfile"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = tostring(var.kafka_resonance_engine_topics_retention)
  }
}

resource "kafka_topic" "event_resonance_engine_fan_top_artists" {
  name               = "event.resonanceEngine.fanTopArtists"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = tostring(var.kafka_resonance_engine_topics_retention)
  }
}

resource "kafka_topic" "event_resonance_engine_fan_top_tracks" {
  name               = "event.resonanceEngine.fanTopTracks"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = tostring(var.kafka_resonance_engine_topics_retention)
  }
}

resource "kafka_topic" "event_resonance_engine_fan_recently_played" {
  name               = "event.resonanceEngine.fanRecentlyPlayed"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = tostring(var.kafka_resonance_engine_topics_retention)
  }
}

resource "kafka_topic" "event_resonance_engine_fan_playlists" {
  name               = "event.resonanceEngine.fanPlaylists"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = tostring(var.kafka_resonance_engine_topics_retention)
  }
}

resource "kafka_topic" "event_resonance_engine_fan_saved_albums" {
  name               = "event.resonanceEngine.fanSavedAlbums"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = tostring(var.kafka_resonance_engine_topics_retention)
  }
}

resource "kafka_topic" "event_resonance_engine_fan_saved_tracks" {
  name               = "event.resonanceEngine.fanSavedTracks"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = tostring(var.kafka_resonance_engine_topics_retention)
  }
}

resource "kafka_topic" "event_resonance_engine_fan_followed_artists" {
  name               = "event.resonanceEngine.fanFollowedArtists"
  replication_factor = var.kafka_default_replication_factor
  partitions         = var.kafka_default_partitions
  config = {
    "retention.ms" = tostring(var.kafka_resonance_engine_topics_retention)
  }
}
