defmodule Mobilizon.Medias.Media.Metadata do
  @moduledoc """
  Represents a media metadata
  """

  use Ecto.Schema
  import Ecto.Changeset

  @type t :: %__MODULE__{
          width: non_neg_integer(),
          height: non_neg_integer(),
          blurhash: String.t()
        }

  @required_attrs []

  @optional_attrs [
    :width,
    :height,
    :blurhash
  ]

  @attrs @required_attrs ++ @optional_attrs

  @primary_key false
  embedded_schema do
    field(:height, :integer)
    field(:width, :integer)
    field(:blurhash, :string)
  end

  @doc false
  @spec changeset(t | Ecto.Schema.t(), map) :: Ecto.Changeset.t()
  def changeset(schema, params) do
    schema
    |> cast(params, @attrs)
  end
end