import type { DrizzleClient } from '@/server/db/client';
import type { LoadCtx } from '@/server/page-layout/types';
import type { Config } from './config';
import { listByIds, listFeaturedMerchants } from '@/server/db/queries/merchants';
import { listSubscribedClubsByUser } from '@/server/db/queries/club';
import { captureCaught } from '@/server/observability/capture.server';

export async function loadData(db: DrizzleClient, config: Config, ctx: LoadCtx) {
  try {
    switch (config.source) {
      case 'subscribed-clubs':
        return await listSubscribedClubsByUser(db, ctx.userId, config.limit);
      case 'ids':
        return await listByIds(db, config.ids ?? []);
      case 'featured':
      default:
        return await listFeaturedMerchants(db, config.limit);
    }
  } catch (err) {
    captureCaught(err, {
      scope: 'server.page-layout.modules.merchant-scroll.loadData',
      severity: 'warning',
    });
    return null;
  }
}
