module ServiceAccountHelper
  def service_post(service, text, options = {})
    acct = find_service_account(service)
    return if acct.nil?

    options[:text] = text
    options[:local_only] ||= true
    options[:nomentions] ||= true
    options[:content_type] ||= 'text/markdown'

    PostStatusService.new.call(acct, options.compact)
  end

  def service_dm(service, to, text, options = {})
    options[:mentions] = [to]
    options[:visibility] ||= :direct
    service_post(service, text, options)
  end

  def find_service_account(service)
    account_id = ENV["#{service.upcase}_USER"].to_i
    return if account_id == 0
    Account.find_by(id: account_id)
  end
end