defmodule Schema.Post do
  @moduledoc false
  use Schema

  @derive {
    Flop.Schema,
    filterable: [],
    sortable: [:published_at, :inserted_at, :updated_at, :id],
    pagination_types: [:first, :last],
    default_order: %{
      order_by: [:published_at, :inserted_at, :updated_at, :id],
      order_directions: [:desc, :desc, :desc, :desc]
    },
    default_pagination_type: :first,
    default_limit: 20,
    max_limit: 50
  }

  @post_kinds ~w[status blog]a

  schema "posts" do
    field :tid, :string
    field :kind, Ecto.Enum, values: @post_kinds
    field :slug, :string
    field :title, :string
    field :body, :string

    field :published_at, :utc_datetime_usec
    field :deleted_at, :utc_datetime_usec

    field :syndicate_to_mastodon, :boolean, default: true
    field :syndicate_to_bluesky, :boolean, default: true

    has_one :mastodon_post, Schema.MastodonPost
    has_one :bluesky_post, Schema.BlueskyPost

    timestamps()
  end

  def kinds, do: @post_kinds
end