# This file is auto-generated by alef — DO NOT EDIT.
# alef:hash:4e15143f4af1ae8bafbdb1506ef057da924484c66a19483966333558ad437e75
# To regenerate: alef generate
# To verify freshness: alef verify --exit-code
# Issues & docs: https://github.com/kreuzberg-dev/alef
defmodule Kreuzberg.ImagePreprocessingConfig do
  @moduledoc """
  Image preprocessing configuration for OCR.

  These settings control how images are preprocessed before OCR to improve
  text recognition quality. Different preprocessing strategies work better
  for different document types.
  """

  @typedoc "Image preprocessing configuration for OCR."
  @type t :: %__MODULE__{
          target_dpi: integer(),
          auto_rotate: boolean(),
          deskew: boolean(),
          denoise: boolean(),
          contrast_enhance: boolean(),
          binarization_method: String.t() | nil,
          invert_colors: boolean()
        }

  defstruct target_dpi: 300,
            auto_rotate: true,
            deskew: true,
            denoise: false,
            contrast_enhance: false,
            binarization_method: "otsu",
            invert_colors: false

  defimpl Jason.Encoder do
    @doc false
    def encode(value, opts) do
      value
      |> Map.from_struct()
      |> Enum.reject(fn {_k, v} -> v == nil end)
      |> Enum.into(%{})
      |> Jason.Encoder.encode(opts)
    end
  end
end
