/**
 * Personal offer lifecycle — single-entity timeout logic.
 *
 * Called by PersonalOfferDO.alarm().
 * Mirrors runPersonalDealTimeout scoped to one personalDealRequestId.
 */

import type { DoDbClient } from '../lib/db.js';
import type { PushClient } from '@/server/push/types';
import { expirePersonalOfferRow } from '@/server/db/queries/do-lifecycle.js';

export interface PersonalOfferAlarmDeps {
  db: DoDbClient;
  push: PushClient;
}

/**
 * Expire a single personal deal request by id.
 * Sets status = EXPIRED and notifies the user.
 */
export async function expirePersonalOffer(
  deps: PersonalOfferAlarmDeps,
  requestId: string,
): Promise<void> {
  const { push } = deps;
  const now = new Date();
  const row = await expirePersonalOfferRow(deps.db, requestId, now);
  if (!row) return;

  await push.sendToUser(row.userId, {
    title: 'בקשת העסקה האישית פגה',
    body: 'הספק לא הגיב בזמן. תוכל לנסות שוב מאוחר יותר.',
    tag: `personal-deal-expired-${requestId}`,
    data: { requestId, type: 'personal_deal_expired' },
  });
}
