import {Meta} from '@storybook/addon-docs/blocks'

<Meta title='@dxtmisha/ru/functional-basic/Classes/ResumableTimer - Таймер с паузой'/>

# Класс ResumableTimer

Класс для создания таймера, который можно приостанавливать, возобновлять, сбрасывать и очищать. Он полезен для элементов интерфейса, которым необходимо отслеживать прошедшее время даже при прерывании, таких как прогресс-бары, автоматически закрывающиеся уведомления или слайды.

## Ключевые особенности

- **Пауза и возобновление** — останавливает обратный отсчет и продолжает его позже с точностью до миллисекунды.
- **Отслеживание завершения** — явно отслеживает, закончил ли таймер свое выполнение.
- **Надежная логика** — обрабатывает крайние случаи, такие как возобновление, когда время уже истекло.
- **Fluent Interface** — методы возвращают `this`, что позволяет использовать цепочки вызовов.

## Инициализация

Для инициализации объекта вызовите конструктор `ResumableTimer(callback, delay, blockStart)`.

**Параметры:**
- `callback: FunctionVoid` — функция, которая будет вызвана после задержки.
- `delay: number = 320` — задержка в миллисекундах.
- `blockStart: boolean = false` — если true, таймер не запустится сразу.

```typescript
import { ResumableTimer } from '@dxtmisha/functional-basic'

// 1. Базовая инициализация (запускается сразу)
const timer = new ResumableTimer(() => {
  console.log('Таймер завершен!')
}, 5000)

// 2. Инициализация без немедленного запуска
const delayedTimer = new ResumableTimer(
  () => console.log('Задача запущена!'),
  3000,
  true
)

delayedTimer.resume() // Запуск вручную
```

## Методы

### Управление

- `resume(): this` — Запускает или возобновляет таймер.
- `pause(): this` — Приостанавливает таймер и вычисляет оставшееся время.
- `reset(): this` — Полностью сбрасывает текущее состояние и перезапускает таймер с исходной задержкой.
- `clear(): this` — Полностью останавливает таймер и сбрасывает все внутренние состояния.
