# Pleroma: A lightweight social networking server
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.User.WelcomeMessage do
  alias Pleroma.Config
  alias Pleroma.User
  alias Pleroma.Web.CommonAPI

  @spec enabled?() :: boolean()
  def enabled?, do: Config.get([:welcome, :direct_message, :enabled], false)

  @spec post_message(User.t()) :: {:ok, Pleroma.Activity.t() | nil}
  def post_message(user) do
    [:welcome, :direct_message, :sender_nickname]
    |> Config.get(nil)
    |> fetch_sender()
    |> do_post(user, welcome_message())
  end

  defp do_post(%User{} = sender, %User{nickname: nickname}, message)
       when is_binary(message) do
    CommonAPI.post(
      sender,
      %{
        visibility: "direct",
        status: "@#{nickname}\n#{message}"
      }
    )
  end

  defp do_post(_sender, _recipient, _message), do: {:ok, nil}

  defp fetch_sender(nickname) when is_binary(nickname) do
    with %User{local: true} = user <- User.get_cached_by_nickname(nickname) do
      user
    else
      _ -> nil
    end
  end

  defp fetch_sender(_), do: nil

  defp welcome_message do
    Config.get([:welcome, :direct_message, :message], nil)
  end
end
