import { createDbService } from '@/server/services/db.js';
import { loadPageForRenderFresh, type PageLayoutSnapshot } from '../page-layout/loader.js';
import type { CronEnv } from './deal-expiry.js';

const WARM_PAGES = [
  { route: 'home', locale: 'he' as const },
  { route: 'home', locale: 'en' as const },
] as const;

export async function runWarmLayout(env: CronEnv): Promise<void> {
  if (!env.R2_BUCKET) {
    console.warn('[warm-layout] R2_BUCKET not bound — skipping snapshot');
    return;
  }
  if (!env.DATABASE_URL) {
    console.warn('[warm-layout] DATABASE_URL not set — skipping snapshot');
    return;
  }

  const db = env.db ?? createDbService({ DATABASE_URL: env.DATABASE_URL });
  const now = new Date().toISOString();

  await Promise.all(
    WARM_PAGES.map(async ({ route, locale }) => {
      try {
        const page = await loadPageForRenderFresh(db, route, {
          isGuest: true,
          locale,
        });
        const snapshot: PageLayoutSnapshot = {
          version: 1,
          buildId: 'cron',
          generatedAt: now,
          route,
          locale,
          page,
        };
        const key = `page-layout/${route}:${locale}.json`;
        await env.R2_BUCKET!.put(key, JSON.stringify(snapshot), {
          httpMetadata: { contentType: 'application/json' },
        });
      } catch (err) {
        console.error(`[warm-layout] failed for ${route}:${locale}`, err);
      }
    }),
  );
}
