/** * Guest create window: now <= endsAt + 1 calendar month * (mirrors trg_reviews_require_confirmed_booking). */ export const isWithinReviewWindow = (endsAt: string | Date, now: Date = new Date()): boolean => { const end = new Date(endsAt) if (Number.isNaN(end.getTime())) return false const deadline = new Date(end) deadline.setMonth(deadline.getMonth() + 1) return now.getTime() <= deadline.getTime() } /** * Host reply window: now <= endsAt + 2 calendar months * (mirrors trg_reviews_host_reply_guard). */ export const isWithinHostReplyWindow = (endsAt: string | Date, now: Date = new Date()): boolean => { const end = new Date(endsAt) if (Number.isNaN(end.getTime())) return false const deadline = new Date(end) deadline.setMonth(deadline.getMonth() + 2) return now.getTime() <= deadline.getTime() }