<?php

namespace Drupal\api_monitor_client;

use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Plugin\DefaultPluginManager;
use Drupal\Core\Plugin\Discovery\AttributeDiscoveryWithAnnotations;
use Drupal\api_monitor_client\Attribute\AttributeMonitorProbe;

/**
 * Manager per i plugin di monitoraggio API basati su Attributi.
 */
class ApiMonitorProbeManager extends DefaultPluginManager {

  /**
   * Constructs a ApiMonitorProbeManager object.
   *
   * @param \Traversable $namespaces
   *   An object that implements \Traversable which contains the root paths
   *   keyed by the corresponding namespace to look for plugin implementations.
   * @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend
   *   Cache backend instance to use.
   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
   *   The module handler to invoke the alter hook with.
   */
  public function __construct(
    \Traversable $namespaces,
    CacheBackendInterface $cache_backend,
    ModuleHandlerInterface $module_handler,
  ) {
    $subdir = 'Plugin/ApiMonitorProbe';
    $plugin_interface = 'Drupal\api_monitor_client\Plugin\ApiMonitorProbeInterface';
    $discovery = new AttributeDiscoveryWithAnnotations(
      $subdir,
      $namespaces,
      AttributeMonitorProbe::class
    );

    parent::__construct(
      $subdir,
      $namespaces,
      $module_handler,
      $plugin_interface,
      AttributeMonitorProbe::class
    );

    $this->discovery = $discovery;

    $this->setCacheBackend($cache_backend, 'api_monitor_probe_plugins');
    $this->alterInfo('api_monitor_probe_info');
  }

}
