<?php

namespace Shm\ShmTypes\Classes;

use Shm\ShmTypes\Classes\EventClasses\ShmEventPostDeletePayload;
use Shm\ShmTypes\Classes\EventClasses\ShmEventPostInsertPayload;
use Shm\ShmTypes\Classes\EventClasses\ShmEventPostLoginPayload;
use Shm\ShmTypes\Classes\EventClasses\ShmEventPostRegisterPayload;
use Shm\ShmTypes\Classes\EventClasses\ShmEventPostUpdatePayload;
use Shm\ShmTypes\Classes\EventClasses\ShmEventPreDeletePayload;
use Shm\ShmTypes\Classes\EventClasses\ShmEventPreInsertPayload;
use Shm\ShmTypes\Classes\EventClasses\ShmEventPreUpdatePayload;

class ShmEventPayload
{

    // Именованные константы для автодополнения и переиспользования
    public const EVENT_POST_REGISTER = 'post_register';
    public const EVENT_POST_LOGIN    = 'post_login';

    //Перед добавлением в базу данных
    public const EVENT_PRE_INSERT = 'pre_insert';
    //После добавления в базу данных
    public const EVENT_POST_INSERT = 'post_insert';
    //Перед обновлением в базу данных
    public const EVENT_PRE_UPDATE = 'pre_update';
    //После обновления в базу данных
    public const EVENT_POST_UPDATE = 'post_update';
    //Перед удалением из базу данных
    public const EVENT_PRE_DELETE = 'pre_delete';
    //После удаления из базу данных
    public const EVENT_POST_DELETE = 'post_delete';


    //Перед добавлением в базу через админку
    public const EVENT_PRE_INSERT_ADMIN = 'pre_insert_admin';
    //После добавления в базу через админку
    public const EVENT_POST_INSERT_ADMIN = 'post_insert_admin';
    //Перед обновлением в базу через админку
    public const EVENT_PRE_UPDATE_ADMIN = 'pre_update_admin';
    //После обновления в базу через админку
    public const EVENT_POST_UPDATE_ADMIN = 'post_update_admin';
    //Перед удалением из базу через админку
    public const EVENT_PRE_DELETE_ADMIN = 'pre_delete_admin';
    //После удаления из базу через админку
    public const EVENT_POST_DELETE_ADMIN = 'post_delete_admin';


    /** Белый список событий, доступных в системе */
    public const ALLOWED_EVENTS = [
        self::EVENT_POST_REGISTER,
        self::EVENT_POST_LOGIN,
        self::EVENT_PRE_INSERT,
        self::EVENT_POST_INSERT,
        self::EVENT_PRE_UPDATE,
        self::EVENT_POST_UPDATE,
        self::EVENT_PRE_DELETE,
        self::EVENT_POST_DELETE,
        self::EVENT_PRE_INSERT_ADMIN,
        self::EVENT_POST_INSERT_ADMIN,
        self::EVENT_PRE_UPDATE_ADMIN,
        self::EVENT_POST_UPDATE_ADMIN,
        self::EVENT_PRE_DELETE_ADMIN,
        self::EVENT_POST_DELETE_ADMIN,
    ];

    public ShmEventPreInsertPayload $preInsertPayload;
    public ShmEventPostInsertPayload $postInsertPayload;
    public ShmEventPreUpdatePayload $preUpdatePayload;
    public ShmEventPostUpdatePayload $postUpdatePayload;
    public ShmEventPreDeletePayload $preDeletePayload;
    public ShmEventPostDeletePayload $postDeletePayload;

    public ShmEventPostRegisterPayload $postRegisterPayload;
    public ShmEventPostLoginPayload $postLoginPayload;
}
