/**
 * tick-frequent-settlement.ts
 *
 * Multiplexed cron tick called every 30 minutes (cron: "* /30 * * * *") from
 * the worker scheduled handler. Drives settlement release queue + reclaims stuck rows.
 */

import { createDbService } from '@/server/services/db.js';
import {
  runSettlementRelease,
  sweepStuckReleases,
} from '@/server/workflows/settlement-scheduler.js';
import { sweepStuckAffiliatePayouts } from '@/server/payments/connect/affiliate-payout.js';
import type { CronEnv } from './deal-expiry.js';

export async function tickFrequentSettlement(env: CronEnv): Promise<void> {
  const db = createDbService({ DATABASE_URL: env.DATABASE_URL });
  await Promise.allSettled([
    // sweepStuckReleases only needs DATABASE_URL — always safe to call.
    sweepStuckReleases(env),
    sweepStuckAffiliatePayouts(db),
    // runSettlementRelease requires the SETTLEMENTS queue binding.
    // Guard so the cron still boots on envs without the queue wired up.
    env.SETTLEMENTS
      ? runSettlementRelease(env as CronEnv & { SETTLEMENTS: NonNullable<CronEnv['SETTLEMENTS']> })
      : Promise.resolve({ dispatched: 0 }),
  ]);
}
