/**
 * Per-monitor dedup window override (PR-B.3, May 2026).
 *
 * Each emit path in NotificationSystem calls resolveDedupWindow(monitorId)
 * to pick the right window before delegating to DedupService.shouldDeliver.
 *
 *   - If monitorId is undefined or NaN → default (no monitor context)
 *   - If the monitor row has dedupWindowSeconds=NULL → default
 *   - Otherwise → the monitor's override
 *
 * Resolver intentionally swallows DB errors and falls back to the
 * default. A dedup miss is preferable to a flapping notification
 * pipeline; the worker would have alerted on the DB outage already.
 */
import { prisma } from '@/lib/prisma';
import { DEFAULT_DEDUP_WINDOW_SECONDS } from './types';
import { log } from '@/lib/observability/logger';

export async function resolveDedupWindow(monitorId?: number): Promise<number> {
    if (!monitorId || !Number.isFinite(monitorId)) return DEFAULT_DEDUP_WINDOW_SECONDS;
    try {
        const row = await prisma.monitor.findUnique({
            where: { id: monitorId },
            select: { dedupWindowSeconds: true },
        });
        const override = row?.dedupWindowSeconds;
        if (override === null || override === undefined) return DEFAULT_DEDUP_WINDOW_SECONDS;
        if (!Number.isFinite(override) || override <= 0) return DEFAULT_DEDUP_WINDOW_SECONDS;
        return override;
    } catch (err) {
        log.warn({ err, monitorId }, 'resolveDedupWindow failed — falling back to default');
        return DEFAULT_DEDUP_WINDOW_SECONDS;
    }
}
