<?php

namespace App\Notifications;

use App\Dtos\InformaciaDto;
use App\Mail\Informacia\ZverejnenaInformaciaPrePekMail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Mail\Mailable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Notification;

/**
 * Class InformaciaPracoviskoNotification
 *
 * Notifikacia pre odosielanie informacii na PEK
 *
 * @package App\Notifications
 * @author Radoslav Lukac <dev@seka.sk>
 */
class InformaciaPracoviskoNotification extends Notification implements ShouldQueue
{
    use Queueable;

    /**
     * Informacia ktora sa posiela v notifikacii
     *
     * @var InformaciaDto
     */
    private InformaciaDto $informacia;

    /**
     * Konstruktor pre vytvorenie novej notifikacie
     *
     * @param InformaciaDto $informacia Informacia ktora sa posiela v notifikacii
     */
    public function __construct(InformaciaDto $informacia)
    {
        $this->informacia = $informacia;
    }

    /**
     * Ziskanie kanalov pre dorucenie notifikacie
     *
     * @return array<int, string>
     */
    public function via(): array
    {
        return ['mail'];
    }

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

    /**
     * Ziskanie reprezentacie notifikacie pre email
     *
     * @param $notifiable
     * @return Mailable
     */
    public function toMail($notifiable): Mailable
    {
        return (new ZverejnenaInformaciaPrePekMail($this->informacia))->to($notifiable->email);
    }
}
