package org.nstart.dep265.requestservice.config

import jakarta.validation.constraints.Min
import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.validation.annotation.Validated

/**
 * Настройки обработки ошибок Kafka-консьюмера маршрутов: DLQ-топик и bounded retry.
 * «Ядовитое» (невалидное по контракту) сообщение уходит в DLQ, а не блокирует партицию.
 */
@Validated
@ConfigurationProperties(prefix = "app.kafka.consumer.route")
data class RouteConsumerProperties(
    /** Топик dead-letter для маршрутов, не прошедших обработку. */
    val dlqTopic: String = "pcp.route.georeference-dlq.v1",

    /** Максимум попыток обработки, включая первичную доставку. */
    @field:Min(1)
    val maxAttempts: Long = 5,

    /** Начальная задержка retry, мс. */
    @field:Min(0)
    val backoffMs: Long = 1_000,

    /** Верхняя граница задержки retry, мс. */
    @field:Min(0)
    val maxBackoffMs: Long = 30_000,
)
