<?php

declare(strict_types=1);

namespace Drupal\ffmpeg_media\ValueObject;

use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Messenger\MessengerInterface;
use Drupal\Core\Session\AccountProxyInterface;
use Drupal\ffmpeg_media\Service\FormatterSettingsResolverInterface;
use Drupal\ffmpeg_media\Service\LockManagerInterface;
use Drupal\ffmpeg_media\Service\OutputStorageServiceInterface;
use Drupal\ffmpeg_media\Service\ProgressTrackerInterface;
use Drupal\ffmpeg_media\Service\QueueManagerInterface;
use Drupal\ffmpeg_media\Service\RetryManagerInterface;
use Drupal\ffmpeg_media\Service\SourceFileResolverInterface;

/**
 * Groups domain-specific dependencies for entity hook implementations.
 *
 * Reduces constructor parameter count by bundling related entity
 * lifecycle services into a single injectable aggregate.
 *
 * @internal
 */
final readonly class EntityHookDependencies {

  /**
   * Constructs an EntityHookDependencies object.
   *
   * @param \Drupal\ffmpeg_media\Service\QueueManagerInterface $queueManager
   *   Queue manager service.
   * @param \Drupal\ffmpeg_media\Service\FormatterSettingsResolverInterface $formatterSettingsResolver
   *   Formatter settings resolver service.
   * @param \Drupal\ffmpeg_media\Service\SourceFileResolverInterface $sourceFileResolver
   *   Source file resolver service.
   * @param \Drupal\Core\Messenger\MessengerInterface $messenger
   *   The messenger service.
   * @param \Drupal\Core\Session\AccountProxyInterface $currentUser
   *   The current user.
   * @param \Drupal\Core\Extension\ModuleHandlerInterface $moduleHandler
   *   The module handler service.
   * @param \Drupal\ffmpeg_media\Service\OutputStorageServiceInterface $outputStorage
   *   Output storage service.
   * @param \Drupal\ffmpeg_media\Service\ProgressTrackerInterface $progressTracker
   *   Progress tracker service.
   * @param \Drupal\ffmpeg_media\Service\LockManagerInterface $lockManager
   *   Lock manager service.
   * @param \Drupal\ffmpeg_media\Service\RetryManagerInterface $retryManager
   *   Retry manager service.
   */
  public function __construct(
    public QueueManagerInterface $queueManager,
    public FormatterSettingsResolverInterface $formatterSettingsResolver,
    public SourceFileResolverInterface $sourceFileResolver,
    public MessengerInterface $messenger,
    public AccountProxyInterface $currentUser,
    public ModuleHandlerInterface $moduleHandler,
    public OutputStorageServiceInterface $outputStorage,
    public ProgressTrackerInterface $progressTracker,
    public LockManagerInterface $lockManager,
    public RetryManagerInterface $retryManager,
  ) {}

}
