<?php

declare(strict_types=1);

namespace Seka\Portal\Modul\Terminy\Notifications\Udalost;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Notification;
use Seka\Portal\Modul\Terminy\Entities\Dtos\UdalostDTO;
use Seka\Portal\Modul\Terminy\Mail\Udalost\AktualizovanaUdalostMail;

/**
 * Class AktualizovanaUdalostNotifikaciaMail
 *
 * @package Seka\Portal\Modul\Terminy\Notifications\Udalost
 */
final class AktualizovanaUdalostNotifikaciaMail extends Notification implements ShouldQueue
{
    use Queueable;

    /**
     * @var \Seka\Portal\Modul\Terminy\Entities\Dtos\UdalostDTO
     */
    public UdalostDTO $udalost;

    /**
     * @var \Seka\Portal\Modul\Terminy\Entities\Dtos\UdalostDTO
     */
    public UdalostDTO $udalostPovodna;

    /**
     * AktualizovanaUdalostNotifikaciaMail constructor.
     *
     * @param \Seka\Portal\Modul\Terminy\Entities\Dtos\UdalostDTO $udalost
     * @param \Seka\Portal\Modul\Terminy\Entities\Dtos\UdalostDTO $udalostPovodna
     */
    public function __construct(UdalostDTO $udalost, UdalostDTO $udalostPovodna)
    {
        $this->udalost = $udalost;
        $this->udalostPovodna = $udalostPovodna;
    }

    /**
     * @return string[]
     */
    public function via(): array
    {
        return [
            'mail'
        ];
    }

    /**
     * @return string[]
     */
    public function viaQueues(): array
    {
        return [
            'mail' => 'email-notifications-queue',
        ];
    }

    /**
     * @param $notifiable
     *
     * @return \Seka\Portal\Modul\Terminy\Mail\Udalost\AktualizovanaUdalostMail
     */
    public function toMail($notifiable): AktualizovanaUdalostMail
    {
        return (new AktualizovanaUdalostMail($this->udalost, $this->udalostPovodna))
            ->to($notifiable);
    }
}
