import React, { useEffect, useState } from 'react';
interface Props {
expiresAt: number;
onExpired: () => void;
}
/**
* شمارش معکوس مهلت رزرو موقت.
*
* بدون این، اپراتور نمیداند چقدر وقت دارد و رزرو در سکوت منقضی میشود — بعد کلیک
* «ثبت» یک ۴۰۹ میگیرد که هیچجا توضیحش را ندیده.
*
* مبنا `expires_at` سرور است، نه شمارندهای که از لحظهٔ رندر شروع شود: ساعت مرورگر و
* تأخیر شبکه هر دو میتوانند چند ثانیه اختلاف بسازند و آن چند ثانیه دقیقاً همانجایی
* است که رزرو از دست میرود.
*/
export default function HoldCountdown({ expiresAt, onExpired }: Props) {
const [remaining, setRemaining] = useState(() => expiresAt - Math.floor(Date.now() / 1000));
useEffect(() => {
const tick = () => {
const left = expiresAt - Math.floor(Date.now() / 1000);
setRemaining(left);
if (left <= 0) onExpired();
};
tick();
const timer = setInterval(tick, 1000);
return () => clearInterval(timer);
}, [expiresAt, onExpired]);
if (remaining <= 0) {
return (
مهلت تمام شد
);
}
const minutes = Math.floor(remaining / 60);
const seconds = remaining % 60;
// زیر یک دقیقه هشدار میگیرد؛ همان لحظهای که اپراتور باید تصمیمش را بگیرد.
const urgent = remaining < 60;
return (
مهلت ثبت: {minutes}:{String(seconds).padStart(2, '0')}
);
}