<?php

declare(strict_types=1);

namespace Drupal\ffmpeg_media_ui\ValueObject;

use Drupal\Core\Queue\QueueFactory;
use Drupal\ffmpeg_media\Service\DashboardStatsServiceInterface;
use Drupal\ffmpeg_media\Service\QueueManagerInterface;
use Drupal\ffmpeg_media\Service\FFmpegExecutorInterface;
use Drupal\ffmpeg_media\Service\FormatterSettingsResolverInterface;
use Drupal\ffmpeg_media\Service\HardwareDetectorInterface;
use Drupal\ffmpeg_media_ui\Service\ActiveConversionsViewModelBuilderInterface;
use Drupal\ffmpeg_media_ui\Service\DashboardBuilderServiceInterface;
use Drupal\ffmpeg_media_ui\Service\MediaListDataServiceInterface;
use Drupal\ffmpeg_media_ui\Service\MediaOperationsService;
use Drupal\ffmpeg_media_ui\Service\MediaStatusPageBuilderInterface;
use Symfony\Component\HttpFoundation\RequestStack;

/**
 * Groups domain-specific dependencies for the dashboard controller.
 *
 * @internal
 */
final readonly class DashboardDependencies {

  /**
   * Constructs a DashboardDependencies object.
   *
   * @param \Drupal\ffmpeg_media_ui\Service\MediaOperationsService $mediaOperations
   *   Media operations service.
   * @param \Drupal\ffmpeg_media\Service\DashboardStatsServiceInterface $statsService
   *   Stats service.
   * @param \Drupal\ffmpeg_media\Service\FormatterSettingsResolverInterface $formatterSettingsResolver
   *   Formatter settings resolver service.
   * @param \Symfony\Component\HttpFoundation\RequestStack $requestStack
   *   Request stack.
   * @param \Drupal\ffmpeg_media\Service\FFmpegExecutorInterface $ffmpegExecutor
   *   FFmpeg executor service.
   * @param \Drupal\ffmpeg_media\Service\HardwareDetectorInterface $hardwareDetector
   *   Hardware detector service.
   * @param \Drupal\Core\Queue\QueueFactory $queueFactory
   *   Queue factory.
   * @param \Drupal\ffmpeg_media\Service\QueueManagerInterface $queueManager
   *   Queue manager for authoritative queued media count.
   * @param \Drupal\ffmpeg_media_ui\Service\DashboardBuilderServiceInterface $dashboardBuilder
   *   Dashboard builder service.
   * @param \Drupal\ffmpeg_media_ui\Service\ActiveConversionsViewModelBuilderInterface $activeConversionsViewModelBuilder
   *   Active conversion view model builder.
   * @param \Drupal\ffmpeg_media_ui\Service\MediaStatusPageBuilderInterface $statusPageBuilder
   *   Status page builder service.
   * @param \Drupal\ffmpeg_media_ui\Service\MediaListDataServiceInterface $mediaListData
   *   Media list data service.
   */
  public function __construct(
    public MediaOperationsService $mediaOperations,
    public DashboardStatsServiceInterface $statsService,
    public FormatterSettingsResolverInterface $formatterSettingsResolver,
    public RequestStack $requestStack,
    public FFmpegExecutorInterface $ffmpegExecutor,
    public HardwareDetectorInterface $hardwareDetector,
    public QueueFactory $queueFactory,
    public QueueManagerInterface $queueManager,
    public DashboardBuilderServiceInterface $dashboardBuilder,
    public ActiveConversionsViewModelBuilderInterface $activeConversionsViewModelBuilder,
    public MediaStatusPageBuilderInterface $statusPageBuilder,
    public MediaListDataServiceInterface $mediaListData,
  ) {}

}
