# frozen_string_literal: true

class InviteMailer < ActionMailer::Base
  include Email::BuildEmailHelper

  layout "email_template"

  def send_invite(invite, invite_to_topic: false)
    # Find the first topic they were invited to
    first_topic = invite.topics.order(:created_at).first

    # get invitee name (based on site setting)
    inviter_name = invite.invited_by.username
    if SiteSetting.enable_names && invite.invited_by.name.present?
      inviter_name = "#{invite.invited_by.name} (#{invite.invited_by.username})"
    end

    sanitized_message =
      (
        if invite.custom_message.present?
          ActionView::Base.full_sanitizer.sanitize(invite.custom_message.gsub(/\n+/, " ").strip)
        else
          nil
        end
      )

    # If they were invited to a topic
    if invite_to_topic && first_topic.present?
      # get topic excerpt
      topic_excerpt = ""
      topic_excerpt = first_topic.excerpt.tr("\n", " ") if first_topic.excerpt

      topic_title = first_topic.try(:title)
      if SiteSetting.private_email?
        topic_title = I18n.t("system_messages.private_topic_title", id: first_topic.id)
        topic_excerpt = ""
      end

      build_email(
        invite.email,
        template: sanitized_message ? "custom_invite_mailer" : "invite_mailer",
        inviter_name: inviter_name,
        site_domain_name: Discourse.current_hostname,
        invite_link: invite.link(with_email_token: true),
        topic_title: topic_title,
        topic_excerpt: topic_excerpt,
        site_description: SiteSetting.site_description,
        site_title: SiteSetting.title,
        user_custom_message: sanitized_message,
      )
    else
      build_email(
        invite.email,
        template: sanitized_message ? "custom_invite_forum_mailer" : "invite_forum_mailer",
        inviter_name: inviter_name,
        site_domain_name: Discourse.current_hostname,
        invite_link: invite.link(with_email_token: true),
        site_description: SiteSetting.site_description,
        site_title: SiteSetting.title,
        user_custom_message: sanitized_message,
      )
    end
  end

  def send_password_instructions(user)
    if user.present?
      email_token =
        user.email_tokens.create!(email: user.email, scope: EmailToken.scopes[:password_reset])
      build_email(
        user.email,
        template: "invite_password_instructions",
        email_token: email_token.token,
      )
    end
  end
end