<?php

declare(strict_types=1);

namespace Drupal\ffmpeg_media\ValueObject;

use Drupal\ffmpeg_media\Service\ConversionFileManagerInterface;
use Drupal\ffmpeg_media\Service\FfmpegCommandBuilderInterface;
use Drupal\ffmpeg_media\Service\FFmpegExecutorInterface;
use Drupal\ffmpeg_media\Service\FFprobeCacheServiceInterface;
use Drupal\ffmpeg_media\Service\FormatterSettingsResolverInterface;
use Drupal\ffmpeg_media\Service\OutputStorageServiceInterface;
use Drupal\ffmpeg_media\Service\PluginFactoryInterface;
use Drupal\ffmpeg_media\Service\ProfileManagerInterface;
use Drupal\ffmpeg_media\Service\ProgressTrackerInterface;
use Drupal\ffmpeg_media\Service\SourceFileResolverInterface;
use Drupal\ffmpeg_media\Service\SubtitleHandlerInterface;

/**
 * Groups domain-specific dependencies for adaptive streaming conversion.
 *
 * Reduces constructor parameter count by bundling related streaming
 * conversion services into a single injectable aggregate.
 */
final readonly class StreamingConversionDependencies {

  /**
   * Constructs a StreamingConversionDependencies object.
   *
   * @param \Drupal\ffmpeg_media\Service\FfmpegCommandBuilderInterface $commandBuilder
   *   Command builder.
   * @param \Drupal\ffmpeg_media\Service\FFmpegExecutorInterface $ffmpegExecutor
   *   FFmpeg executor.
   * @param \Drupal\ffmpeg_media\Service\PluginFactoryInterface $pluginFactory
   *   Plugin factory.
   * @param \Drupal\ffmpeg_media\Service\FormatterSettingsResolverInterface $formatterSettingsResolver
   *   Formatter settings resolver.
   * @param \Drupal\ffmpeg_media\Service\SourceFileResolverInterface $sourceFileResolver
   *   Source file resolver.
   * @param \Drupal\ffmpeg_media\Service\OutputStorageServiceInterface $outputStorage
   *   Output storage.
   * @param \Drupal\ffmpeg_media\Service\ProfileManagerInterface $profileManager
   *   Profile manager.
   * @param \Drupal\ffmpeg_media\Service\ProgressTrackerInterface $progressTracker
   *   Progress tracker.
   * @param \Drupal\ffmpeg_media\Service\SubtitleHandlerInterface $subtitleHandler
   *   Subtitle handler.
   * @param \Drupal\ffmpeg_media\Service\ConversionFileManagerInterface $conversionFileManager
   *   Conversion file manager.
   * @param \Drupal\ffmpeg_media\Service\FFprobeCacheServiceInterface $ffprobeCache
   *   FFprobe cache.
   */
  public function __construct(
    public FfmpegCommandBuilderInterface $commandBuilder,
    public FFmpegExecutorInterface $ffmpegExecutor,
    public PluginFactoryInterface $pluginFactory,
    public FormatterSettingsResolverInterface $formatterSettingsResolver,
    public SourceFileResolverInterface $sourceFileResolver,
    public OutputStorageServiceInterface $outputStorage,
    public ProfileManagerInterface $profileManager,
    public ProgressTrackerInterface $progressTracker,
    public SubtitleHandlerInterface $subtitleHandler,
    public ConversionFileManagerInterface $conversionFileManager,
    public FFprobeCacheServiceInterface $ffprobeCache,
  ) {}

}
