<?php

declare(strict_types=1);

namespace Drupal\ffmpeg_media\Form;

use Drupal\Core\Config\Config;

/**
 * Builds form sections for the FFmpeg Media settings form.
 */
interface SettingsFormBuilderInterface {

  /**
   * Builds the FFmpeg status section.
   *
   * @param array<string, mixed> $form
   *   Form structure, passed by reference.
   * @param \Drupal\Core\Config\Config $config
   *   Module configuration.
   */
  public function buildStatusSection(array &$form, Config $config): void;

  /**
   * Builds the general settings section.
   *
   * @param array<string, mixed> $form
   *   Form structure, passed by reference.
   * @param \Drupal\Core\Config\Config $config
   *   Module configuration.
   */
  public function buildGeneralSection(array &$form, Config $config): void;

  /**
   * Builds the FFmpeg binary settings section.
   *
   * @param array<string, mixed> $form
   *   Form structure, passed by reference.
   * @param \Drupal\Core\Config\Config $config
   *   Module configuration.
   */
  public function buildFfmpegSection(array &$form, Config $config): void;

  /**
   * Builds the queue settings section.
   *
   * @param array<string, mixed> $form
   *   Form structure, passed by reference.
   * @param \Drupal\Core\Config\Config $config
   *   Module configuration.
   */
  public function buildQueueSection(array &$form, Config $config): void;

  /**
   * Builds the hardware acceleration section.
   *
   * @param array<string, mixed> $form
   *   Form structure, passed by reference.
   * @param \Drupal\Core\Config\Config $config
   *   Module configuration.
   */
  public function buildHardwareSection(array &$form, Config $config): void;

  /**
   * Builds the processor selection section.
   *
   * @param array<string, mixed> $form
   *   Form structure, passed by reference.
   * @param \Drupal\Core\Config\Config $config
   *   Module configuration.
   */
  public function buildProcessorSection(array &$form, Config $config): void;

  /**
   * Builds the manifest settings section.
   *
   * @param array<string, mixed> $form
   *   Form structure, passed by reference.
   * @param \Drupal\Core\Config\Config $config
   *   Module configuration.
   */
  public function buildManifestSection(array &$form, Config $config): void;

  /**
   * Builds the audio settings section.
   *
   * @param array<string, mixed> $form
   *   Form structure, passed by reference.
   * @param \Drupal\Core\Config\Config $config
   *   Module configuration.
   */
  public function buildAudioSection(array &$form, Config $config): void;

  /**
   * Builds the Whisper transcription settings section.
   *
   * @param array<string, mixed> $form
   *   Form structure, passed by reference.
   * @param \Drupal\Core\Config\Config $config
   *   Module configuration.
   */
  public function buildWhisperSection(array &$form, Config $config): void;

  /**
   * Builds the retry and recovery settings section.
   *
   * @param array<string, mixed> $form
   *   Form structure, passed by reference.
   * @param \Drupal\Core\Config\Config $config
   *   Module configuration.
   */
  public function buildRetrySection(array &$form, Config $config): void;

  /**
   * Builds the advanced settings section.
   *
   * @param array<string, mixed> $form
   *   Form structure, passed by reference.
   * @param \Drupal\Core\Config\Config $config
   *   Module configuration.
   */
  public function buildAdvancedSection(array &$form, Config $config): void;

  /**
   * Builds the security settings section (health probe authentication).
   *
   * @param array<string, mixed> $form
   *   Form structure, passed by reference.
   * @param \Drupal\Core\Config\Config $config
   *   Module configuration.
   */
  public function buildSecuritySection(array &$form, Config $config): void;

}
