import type { DrizzleClient } from '@/server/db/client';
import type { LoadCtx } from '@/server/page-layout/types';
import type { Config } from './config';
import {
  queryWhatsLeftCards,
  filterPrefetchedPool,
  toDealCardDeal,
} from '@/features/feed/FeedDataLoader';
import { captureCaught } from '@/server/observability/capture.server';

export async function loadData(db: DrizzleClient, config: Config, ctx: LoadCtx) {
  try {
    // Fast path: filter whatsLeft deals from pre-fetched pool (guest pages).
    if (ctx.prefetchedDeals) {
      const rows = filterPrefetchedPool(ctx.prefetchedDeals, {
        limit: config.limit,
        whatsLeft: true,
      });
      return rows.map((r) => toDealCardDeal(r, ctx.hotDealThreshold));
    }
    return await queryWhatsLeftCards(db, config.limit, ctx.hotDealThreshold);
  } catch (err) {
    captureCaught(err, {
      scope: 'server.page-layout.modules.deal-row-whats-left.loadData',
      severity: 'warning',
    });
    return null;
  }
}
