import type { DrizzleClient } from '@/server/db/client';
import type { LoadCtx } from '@/server/page-layout/types';
import type { Config } from './config';
import { queryDealsFeed } from '@/server/db/queries/feed';
import { captureCaught } from '@/server/observability/capture.server';

// Tel Aviv city center — fallback when IP geo unavailable or resolves outside Israel.
const TEL_AVIV_RADIUS = { lat: 32.0853, lng: 34.7818, km: 10 } as const;

// First-render uses geo-IP; client hook refetches with user pref on hydration.
export async function loadData(db: DrizzleClient, config: Config, ctx: LoadCtx) {
  try {
    const radius =
      ctx.geo && ctx.geo.country === 'IL'
        ? { lat: ctx.geo.lat, lng: ctx.geo.lng, km: 10 }
        : TEL_AVIV_RADIUS;

    const result = await queryDealsFeed(
      db,
      {
        radius,
        preset: 'near-you',
        limit: config.limit,
        hours: { mode: 'any' },
      },
      ctx.locale ?? 'he',
    );
    return result.deals;
  } catch (err) {
    captureCaught(err, {
      scope: 'server.page-layout.modules.deal-row-near-you.loadData',
      severity: 'warning',
    });
    return null;
  }
}
