package cloud.nstart.terravault.ordinis.restapi.dto.webhook;

import java.time.OffsetDateTime;
import java.util.List;

/**
 * Response для time-bucketed histogram статистики delivery'и одной подписки.
 *
 * <p>Endpoint: {@code GET /api/v1/webhooks/subscriptions/{id}/stats
 * ?bucketBy=hour|day&from=...&to=...}.
 *
 * <p>Структура:
 * <ul>
 *   <li>{@code bucketBy} — granularity, эхо из request'а ('hour' / 'day').</li>
 *   <li>{@code from}/{@code to} — actual диапазон, который пошёл в SQL
 *       (resolved дефолты если параметры были опущены).</li>
 *   <li>{@code buckets} — массив continuous timeline'ов: каждый bucket'
 *       (даже без events) представлен row'ом с zero count'ами. Frontend
 *       chart рисует ровную time axis без gap'ов.</li>
 * </ul>
 *
 * <p>Bucket row: {@code ts} — start of interval, остальные — count'ы по
 * каждому status'у. {@code total} = сумма для convenience.
 */
public record WebhookDeliveryStatsResponse(
    String bucketBy,
    OffsetDateTime from,
    OffsetDateTime to,
    List<Bucket> buckets) {

  /**
   * Один time bucket с count'ами per status.
   *
   * <p>{@code ts} — начало интервала (date_trunc(bucketUnit, created_at)).
   * Frontend chart использует это как X-axis label.
   */
  public record Bucket(
      OffsetDateTime ts,
      long pending,
      long retrying,
      long delivered,
      long dlq,
      long total) {}
}
