<?php

declare(strict_types=1);

namespace Drupal\ffmpeg_media\ValueObject;

use Drupal\ffmpeg_media\FFmpegProcessorPluginManager;
use Drupal\ffmpeg_media\Service\ConversionFileManagerInterface;
use Drupal\ffmpeg_media\Service\FFmpegExecutorInterface;
use Drupal\ffmpeg_media\Service\FormatterSettingsResolverInterface;
use Drupal\ffmpeg_media\Service\OutputStorageServiceInterface;
use Drupal\ffmpeg_media\Service\ProfileManagerInterface;
use Drupal\ffmpeg_media\Service\QueueManagerInterface;
use Drupal\ffmpeg_media\Service\SourceFileResolverInterface;
use Drupal\ffmpeg_media\Service\VideoConverterInterface;

/**
 * Groups domain-specific dependencies for Drush conversion commands.
 *
 * Reduces constructor parameter count by bundling conversion-related
 * services into a single injectable aggregate. EntityTypeManager and
 * FileSystem are excluded since they are frequently needed independently.
 *
 * @internal
 */
final readonly class ConversionCommandDependencies {

  /**
   * Constructs a ConversionCommandDependencies object.
   *
   * @param \Drupal\ffmpeg_media\Service\VideoConverterInterface $videoConverter
   *   Video converter service.
   * @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\ffmpeg_media\Service\FFmpegExecutorInterface $ffmpegExecutor
   *   FFmpeg executor service.
   * @param \Drupal\ffmpeg_media\Service\ProfileManagerInterface $profileManager
   *   Profile manager service.
   * @param \Drupal\ffmpeg_media\FFmpegProcessorPluginManager $processorManager
   *   Processor plugin manager.
   * @param \Drupal\ffmpeg_media\Service\ConversionFileManagerInterface $conversionFileManager
   *   Conversion file manager.
   * @param \Drupal\ffmpeg_media\Service\OutputStorageServiceInterface $outputStorage
   *   Output storage service.
   */
  public function __construct(
    public VideoConverterInterface $videoConverter,
    public QueueManagerInterface $queueManager,
    public FormatterSettingsResolverInterface $formatterSettingsResolver,
    public SourceFileResolverInterface $sourceFileResolver,
    public FFmpegExecutorInterface $ffmpegExecutor,
    public ProfileManagerInterface $profileManager,
    public FFmpegProcessorPluginManager $processorManager,
    public ConversionFileManagerInterface $conversionFileManager,
    public OutputStorageServiceInterface $outputStorage,
  ) {}

}
