Trieda `BulkGate\Sms\Message` reprezentuje objekt SMS správy, ktorá sa skladá z obsahu správy a príjemcu.

```php
use BulkGate\Sms\Message;
```

## Príjemca

Trieda prijíma ako prvý argument telefónne číslo, ktoré môže byť zadané reťazcom:

```php
$message = new Message('420777777777', 'test správy');
```

alebo prijíma inštanciu objektu [`Message\PhoneNumber`](https://www.bulkgate.com/sk/dokumentacia/php-sdk/php-sdk-telefonne-cislo/):

```php
$message = new Sms\Message(new Message\PhoneNumber('420777777777'), 'test správy');
```

Telefónne číslo môžete zadať aj po vytvorení inštancie objektu pomocou metódy `phoneNumber($phone_number, $iso = null)`:

```php
$message = new Sms\Message();

$message->phoneNumber('420777777777');  // reťazec
$message->phoneNumber('777777777', BulkGate\Sms\Country::CZECH_REPUBLIC);  // Variant s doplnením medzinárodnej telefónnej predvoľby
$message->phoneNumber(new Message\PhoneNumber('420777777777')); 
```

Na získanie telefónneho čísla môžete použiť metódu `getPhoneNumber()`, ktorá vracia vždy inštanciu objektu [`Message\PhoneNumber`](https://www.bulkgate.com/sk/dokumentacia/php-sdk/php-sdk-telefonne-cislo/).

```php
/** @var Message\PhoneNumber $phone_number */
$phone_number = $message->getPhoneNumber();
```

## Text správy

Druhým parametrom je zadanie textu správy. Aj tu sú 2 možnosti, prvou je zadanie textu pomocou reťazca a druhou je inštancia triedy [`Message\Text`](https://www.bulkgate.com/sk/dokumentacia/php-sdk/php-sdk-text-spravy/).

```php
$message = new Message(
        new Message\PhoneNumber('420777777777'), 
        new Message\Text('test správy')
);
```

Samozrejme aj tu môžete definovať text aj po vytvorení inštancie objektu pomocou metódy `text($text, array $variables = [])`

```php
$message = new Sms\Message();
$message->phoneNumber('420777777777');  // reťazec

$message->text('test správy'); // reťazec

$message->text(new Message\Text('test správy')); 

$message->text(
    'Ahoj <first_name> <last_name>', [
        'first_name' => 'Jan', 
        'last_name' => 'Novak'
    ]); // doplnenie premenných; výsledný text je "Ahoj Jan Novak"
```

Na získanie textu správy môžete použiť metódu `getText()`, ktorá vracia vždy inštanciu objektu [`Message\Text`](https://www.bulkgate.com/sk/dokumentacia/php-sdk/php-sdk-text-spravy/).

```php
/** @var Message\Text $text */
$text = $message->getText();
```

## JSON podpora

Objekt `BulkGate\Sms\Message` implementuje rozhranie [`\JsonSerializable`](http://php.net/manual/en/class.jsonserializable.php), vďaka ktorému ho môžete previesť pomocou funkcie [`json_encode()`](http://php.net/manual/en/function.json-encode.php) do formátu JSON.

```php
/** @var BulkGate\Sms\Message $message */
$message = new Message('420777777777', 'test správy');

echo json_encode($message);
```

Výstupom je:

```json
{
  "number": {
    "number": "420777777777",
    "iso": null
  },
  "text": "test správy",
  "status": "preparation",
  "price": 0.0,
  "credit": 0.0,
  "id": null,
  "scheduled": null
}
```

Kľúče `status`, `price`, `credit` a `id` sa naplnia až po odoslaní, `scheduled`
po zavolaní `schedule()`.

## Prevod na reťazec

Objekt `BulkGate\Sms\Message` implementuje magickú metódu [`__string()`](http://php.net/manual/en/language.oop5.magic.php#object.tostring)

```php
/** @var BulkGate\Sms\Message $message */
$message = (string) $message; // do premennej
echo $message; // na výstup
```

Výstupom je:

```
420777777777: test správy
```

## Prevod na pole 

```php
/** @var BulkGate\Sms\Message $message */
$array = $message->toArray();
```

## Fluentné rozhranie

Fluentné rozhranie (anglicky [fluent interface](https://en.wikipedia.org/wiki/Fluent_interface)) je technika reťazenia metód.

```php
$message = new Sms\Message();

$message->phoneNumber('420777777777')
        ->text('test správy');
```

## Informácie po odoslaní

Po odoslaní správy je možné zo správy získať cenu, stav a id správy.

```php
$id = $message->getId();  // id správy
$status = $message->getStatus(); // stav
$price = $message->getPrice(); // cena
$credit = $message->getCredit(); // zostatok kreditu po odoslaní
```

## Naplánovanie správy

Metóda `schedule()` nastaví čas odoslania unixovou časovou značkou. Bez parametra
naplánovanie zruší.

```php
$message->schedule(strtotime('2026-01-15 09:00')); // naplánovať
$message->schedule(); // zrušiť naplánovanie
```
