<?php

namespace _JchOptimizeVendor\Laminas\EventManager;

/**
 * Interface for shared event listener collections.
 */
interface SharedEventManagerInterface
{
    /**
     * Attach a listener to an event emitted by components with specific identifiers.
     *
     * @param string   $identifier Identifier for event emitting component
     * @param string   $eventName
     * @param callable $listener   listener that will handle the event
     * @param int      $priority   Priority at which listener should execute
     */
    public function attach($identifier, $eventName, callable $listener, $priority = 1);

    /**
     * Detach a shared listener.
     *
     * Allows detaching a listener from one or more events to which it may be
     * attached.
     *
     * @param callable    $listener   listener to detach
     * @param null|string $identifier identifier from which to detach; null indicates
     *                                all registered identifiers
     * @param null|string $eventName  event from which to detach; null indicates
     *                                all registered events
     *
     * @throws Exception\InvalidArgumentException for invalid identifier arguments
     * @throws Exception\InvalidArgumentException for invalid event arguments
     */
    public function detach(callable $listener, $identifier = null, $eventName = null);

    /**
     * Retrieve all listeners for given identifiers.
     *
     * @param string $eventName
     *
     * @return array
     */
    public function getListeners(array $identifiers, $eventName);

    /**
     * Clear all listeners for a given identifier, optionally for a specific event.
     *
     * @param string      $identifier
     * @param null|string $eventName
     */
    public function clearListeners($identifier, $eventName = null);
}
