Os agendadores são classes que permitem agendar mensagens em determinados intervalos ou em momentos específicos.

## Agendador simples

Agendador simples para enviar mensagens num momento específico.

```php
$scheduler = new Simple(new DateTime('2025-12-13 12:00'));
$scheduler->schedule($message);
```

## Campanha

O agendador de campanha permite iniciar o envio de mensagens a partir de um momento específico, em intervalos definidos. Pode também definir quantas mensagens planeadas são enviadas após um determinado intervalo.

```php
$scheduler = new Campaign(new DateTime('2025-12-13 12:00'));
$scheduler->restriction(100 /* messages */, 2, 'hours');
$scheduler->schedule($message);
```

O método `restriction()` aceita apenas estas unidades: `minute`, `minutes`,
`hour`, `hours`, `day`, `days`. Qualquer outro valor termina com uma
`BulkGate\Sdk\InvalidStateException`.

A hora de início altera-se com o método `datetime()`, e `reset()` limpa o
contador de lotes enviados.

## Sem agendamento

`BulkGate\Sdk\Scheduler\None` é um agendador vazio — envia a mensagem de imediato.
É útil quando passa um agendador de forma condicional.

## Passar o agendador ao sender

Não tem de chamar o agendador manualmente; depois de o definir no sender, aplica-se
a todas as mensagens que enviar.

```php
$sender->setScheduler(new Simple(new DateTime('2025-12-13 12:00')));
$sender->setScheduler(null); // cancelar o agendamento
```