class KnowledgeBase::Answer::Translation::Content < ApplicationModel
  include HasAgentAllowedParams
  include HasRichText
  include HasKnowledgeBaseAttachmentPermissions

  AGENT_ALLOWED_ATTRIBUTES = %i[body].freeze

  has_one :translation, class_name: 'KnowledgeBase::Answer::Translation', inverse_of: :content, dependent: :nullify

  has_rich_text :body

  attachments_cleanup!

  def visible?
    translation.answer.visible?
  end

  def visible_internally?
    translation.answer.visible_internally?
  end

  delegate :created_by_id, to: :translation

  def attributes_with_association_ids
    attrs = super
    add_attachments_to_attributes(attrs)
  end

  def attributes_with_association_names
    attrs = super
    add_attachments_to_attributes(attrs)
  end

  def add_attachments_to_attributes(attributes)
    attributes['attachments'] = attachments
                                .reject { |file| HasRichText.attachment_inline?(file) }
                                .map(&:attributes_for_display)

    attributes
  end

  def search_index_attribute_lookup
    attrs = super
    attrs['body'] = ActionController::Base.helpers.strip_tags attrs['body']
    attrs
  end

  private

  def touch_translation
    translation&.touch # rubocop:disable Rails/SkipsModelValidations
  end

  after_save  :touch_translation
  after_touch :touch_translation

  def sanitize_body
    self.body = HtmlSanitizer.dynamic_image_size(body)
  end

  before_save :sanitize_body
end
