<?php

namespace App\Providers;

use App\Events\UserLoggedIn;
use App\Events\UserLoggedOut;
use Illuminate\Auth\Events\Login;
use Illuminate\Auth\Events\Logout;
use App\Listeners\LaravelLoginEventListener;
use App\Listeners\LaravelLogoutEventListener;
use App\Listeners\AktivitaOdhlaseniaPouzivatela;
use App\Listeners\FcmNotificationFailedListener;
use App\Listeners\AktivitaPrihlaseniaPouzivatela;
use App\Listeners\UvitaniePouzivatelaPoPrihlaseni;
use App\Listeners\AktivitaVzdelavanieKniznicaKategoria;
use Illuminate\Notifications\Events\NotificationFailed;
use Seka\Vzdelavanie\Events\Kniznica\Frontend\SekciaOpened;
use Seka\Vzdelavanie\Events\Kniznica\Backend\SekciaCreated;
use Seka\Vzdelavanie\Events\Kniznica\Backend\SekciaUpdated;
use Seka\Vzdelavanie\Events\Kniznica\Backend\SekciaDeleted;
use App\Listeners\AktivitaVzdelavanieKniznicaUcebnyMaterial;
use Seka\Vzdelavanie\Events\Testovanie\Frontend\TestGenerated;
use Seka\Vzdelavanie\Events\Testovanie\Frontend\TestSpustenie;
use Seka\Vzdelavanie\Events\Kniznica\Backend\KategoriaCreated;
use Seka\Vzdelavanie\Events\Kniznica\Backend\KategoriaUpdated;
use Seka\Vzdelavanie\Events\Kniznica\Backend\KategoriaDeleted;
use App\Listeners\UpozornitPouzivatelaNaNeprecitaneNotifikacie;
use App\Listeners\NastavitDatumovuPeciatkuPoslednehoPrihlasenia;
use Seka\Vzdelavanie\Events\Testovanie\Frontend\TestVyhodnotenie;
use Seka\Vzdelavanie\Events\Kniznica\Frontend\UcebnyMaterialOpened;
use Seka\Vzdelavanie\Events\Kniznica\Backend\UcebnyMaterialDeleted;
use Seka\Vzdelavanie\Events\Kniznica\Backend\UcebnyMaterialUpdated;
use Seka\Vzdelavanie\Events\Kniznica\Backend\UcebnyMaterialCreated;
use App\Listeners\AktivitaVzdelavanieKniznicaSekciaUcebnehoMaterialu;
use App\Listeners\AktivitaVzdelavanieTestovanieSpustenieTestuPouzivatelom;
use App\Listeners\AktivitaVzdelavanieTestovanieGenerovanieTestuPouzivatelom;
use App\Listeners\AktivitaVzdelavanieTestovanieVyhodnotenieTestuPouzivatelom;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

/**
 * Class EventServiceProvider
 *
 * @package App\Providers
 */
class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        //***************************
        // FRONTEND
        //***************************

        // LOGIN
        Login::class => [LaravelLoginEventListener::class],
        Logout::class => [LaravelLogoutEventListener::class],

        UserLoggedIn::class => [
            AktivitaPrihlaseniaPouzivatela::class,
            UvitaniePouzivatelaPoPrihlaseni::class,
            UpozornitPouzivatelaNaNeprecitaneNotifikacie::class,
            NastavitDatumovuPeciatkuPoslednehoPrihlasenia::class,
        ],
        UserLoggedOut::class => [AktivitaOdhlaseniaPouzivatela::class],

        // KNIZNICA
        UcebnyMaterialOpened::class => [AktivitaVzdelavanieKniznicaUcebnyMaterial::class],
        SekciaOpened::class => [AktivitaVzdelavanieKniznicaSekciaUcebnehoMaterialu::class],

        // TESTY
        TestSpustenie::class => [AktivitaVzdelavanieTestovanieSpustenieTestuPouzivatelom::class],
        TestGenerated::class => [AktivitaVzdelavanieTestovanieGenerovanieTestuPouzivatelom::class],
        TestVyhodnotenie::class => [AktivitaVzdelavanieTestovanieVyhodnotenieTestuPouzivatelom::class],

        //***************************
        // BACKEND
        //***************************

        // KNIZNICA
        KategoriaCreated::class => [AktivitaVzdelavanieKniznicaKategoria::class],
        KategoriaUpdated::class => [AktivitaVzdelavanieKniznicaKategoria::class],
        KategoriaDeleted::class => [AktivitaVzdelavanieKniznicaKategoria::class],
        UcebnyMaterialCreated::class => [AktivitaVzdelavanieKniznicaUcebnyMaterial::class],
        UcebnyMaterialUpdated::class => [AktivitaVzdelavanieKniznicaUcebnyMaterial::class],
        UcebnyMaterialDeleted::class => [AktivitaVzdelavanieKniznicaUcebnyMaterial::class],
        SekciaCreated::class => [AktivitaVzdelavanieKniznicaSekciaUcebnehoMaterialu::class],
        SekciaUpdated::class => [AktivitaVzdelavanieKniznicaSekciaUcebnehoMaterialu::class],
        SekciaDeleted::class => [AktivitaVzdelavanieKniznicaSekciaUcebnehoMaterialu::class],

        NotificationFailed::class => [FcmNotificationFailedListener::class],
    ];

    /**
     * Register any events for your application.
     *
     * @return void
     */
    public function boot()
    {
        parent::boot();
        //
    }
}
