# Preview all emails at http://localhost:3000/rails/mailers/notification_mailer

# A Notification is attached as a Comment to the relevant discussion,
# then sent by email to the user.
#
# The subject and body of a Notification can be customized by each demarche.
#
class NotificationMailer < ApplicationMailer
  include ActionView::Helpers::SanitizeHelper

  before_action :set_dossier
  after_action :create_commentaire_for_notification

  helper ServiceHelper
  helper MailerHelper

  layout 'mailers/notifications_layout'
  default from: NO_REPLY_EMAIL

  def send_notification
    @service = @dossier.procedure.service
    @logo_url = attach_logo(@dossier.procedure)
    @rendered_template = sanitize(@body)
    attachments[@attachment[:filename]] = @attachment[:content] if @attachment.present?

    I18n.with_locale(@dossier.user_locale) do
      mail(subject: @subject, to: @email, template_name: 'send_notification')
    end
  end

  def self.send_en_construction_notification(dossier)
    with(dossier: dossier, state: Dossier.states.fetch(:en_construction)).send_notification
  end

  def self.send_en_instruction_notification(dossier)
    with(dossier: dossier, state: Dossier.states.fetch(:en_instruction)).send_notification
  end

  def self.send_accepte_notification(dossier)
    with(dossier: dossier, state: Dossier.states.fetch(:accepte)).send_notification
  end

  def self.send_refuse_notification(dossier)
    with(dossier: dossier, state: Dossier.states.fetch(:refuse)).send_notification
  end

  def self.send_sans_suite_notification(dossier)
    with(dossier: dossier, state: Dossier.states.fetch(:sans_suite)).send_notification
  end

  private

  def set_dossier
    @dossier = params[:dossier]

    if @dossier.user_deleted?
      mail.perform_deliveries = false
    else
      I18n.with_locale(@dossier.user_locale) do
        mail_template = @dossier.procedure.mail_template_for(params[:state])

        @email = @dossier.user_email_for(:notification)
        @subject = mail_template.subject_for_dossier(@dossier)
        @body = mail_template.body_for_dossier(@dossier)
        @actions = mail_template.actions_for_dossier(@dossier)
        @attachment = mail_template.attachment_for_dossier(@dossier)
      end
    end
  end

  def create_commentaire_for_notification
    body = ["[#{@subject}]", @body].join("<br><br>")
    commentaire = CommentaireService.build_with_email(CONTACT_EMAIL, @dossier, body: body)
    commentaire.save!
  end
end