class NotificationFactory::Slack

=begin

  result = NotificationFactory::Slack.template(
    template: 'ticket_update',
    locale: 'en-us',
    timezone: 'Europe/Berlin',
    objects:  {
      recipient: User.find(2),
      ticket: Ticket.find(1)
    },
  )

returns

  {
    subject: 'some subject',
    body: 'some body',
  }

=end

  def self.template(data)

    if data[:templateInline]
      return NotificationFactory::Renderer.new(
        objects:  data[:objects],
        locale:   data[:locale],
        timezone: data[:timezone],
        template: data[:templateInline]
      ).render
    end

    template = NotificationFactory.template_read(
      locale:   data[:locale] || Setting.get('locale_default') || 'en-us',
      template: data[:template],
      format:   'md',
      type:     'slack',
    )

    message_subject = NotificationFactory::Renderer.new(
      objects:  data[:objects],
      locale:   data[:locale],
      timezone: data[:timezone],
      template: template[:subject],
      escape:   false
    ).render
    message_body = NotificationFactory::Renderer.new(
      objects:  data[:objects],
      locale:   data[:locale],
      timezone: data[:timezone],
      template: template[:body],
      escape:   false
    ).render

    if !data[:raw]
      application_template = NotificationFactory.application_template_read(
        format: 'md',
        type:   'slack',
      )
      data[:objects][:message] = message_body
      data[:objects][:standalone] = data[:standalone]
      message_body = NotificationFactory::Renderer.new(
        objects:  data[:objects],
        locale:   data[:locale],
        timezone: data[:timezone],
        template: application_template,
        escape:   false
      ).render
    end
    {
      subject: message_subject.strip!,
      body:    message_body.strip!,
    }
  end

end
