defmodule Mobilizon.Events.Participant.Metadata do
  @moduledoc """
  Participation stats on event
  """

  use Ecto.Schema
  import Ecto.Changeset
  alias Mobilizon.Web.Email.Checker

  @type t :: %__MODULE__{
          email: String.t(),
          confirmation_token: String.t(),
          cancellation_token: String.t(),
          message: String.t(),
          locale: String.t()
        }

  @attrs [:email, :confirmation_token, :cancellation_token, :message, :locale, :timezone]

  @derive Jason.Encoder
  embedded_schema do
    field(:email, :string)
    field(:confirmation_token, :string)
    field(:cancellation_token, :string)
    field(:message, :string)
    field(:locale, :string)
    field(:timezone, :string)
  end

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