defmodule PhilomenaMedia.Processors.Processor do
  @moduledoc false

  alias PhilomenaMedia.Analyzers.Result
  alias PhilomenaMedia.Processors
  alias PhilomenaMedia.Intensities

  @doc """
  Generate a list of version filenames for the given version list.
  """
  @callback versions(Processors.version_list()) :: [Processors.version_filename()]

  @doc """
  Process the media at the given path against the given version list, and return an
  edit script with the resulting files.
  """
  @callback process(Result.t(), Path.t(), Processors.version_list()) :: Processors.edit_script()

  @doc """
  Perform post-processing optimization tasks on the file, to reduce its size
  and strip non-essential metadata.
  """
  @callback post_process(Result.t(), Path.t()) :: Processors.edit_script()

  @doc """
  Generate corner intensities for the given path.
  """
  @callback intensities(Result.t(), Path.t()) :: Intensities.t()
end