<?php

namespace App\Listeners;

use App\Dtos\Factory\InformaciaDtoFactory;
use App\Events\InformaciaZverejnenaEvent;
use App\Models\Pracovisko\Pracovisko;
use App\Notifications\InformaciaPracoviskoNotification;
use Illuminate\Contracts\Queue\ShouldQueue;

/**
 * Class SendInformaciaPracoviskoNotificationListener
 *
 * Listener sluziaci na odosielanie notifikacii na pracoviska PEK pri zverejneni novej informacie
 *
 * @package App\Listeners
 * @author Radoslav Lukac <dev@seka.sk>
 */
class SendInformaciaPracoviskoNotificationListener implements ShouldQueue
{
    /**
     * Spracovanie eventu pre odoslanie notifikacie na PEK
     *
     * @param InformaciaZverejnenaEvent $event Event obsahujuci informaciu
     * @return void
     */
    public function handle(InformaciaZverejnenaEvent $event): void
    {
        // Kontrola či má byť odoslaný email na PEK
        if (!$event->informacia->odoslat_email_na_pek) {
            return;
        }

        $informaciaDto = InformaciaDtoFactory::make($event->informacia);

        // Získame všetky pracoviská
        $pracoviska = Pracovisko::all();

        // Odošleme notifikáciu každému pracovisku
        foreach ($pracoviska as $pracovisko) {
            $pracovisko->notify(new InformaciaPracoviskoNotification($informaciaDto));
        }
    }
}
