# frozen_string_literal: true

module Gitlab
  module MarkdownCache
    # Knows about the relationship between markdown and html field names, and
    # stores the rendering contexts for the latter
    class FieldData
      def initialize
        @data = {}
      end

      delegate :[], :[]=, to: :@data

      def markdown_fields
        @data.keys
      end

      def html_field(markdown_field)
        "#{markdown_field}_html"
      end

      def html_fields
        @html_fields ||= markdown_fields.map { |field| html_field(field) }
      end

      def html_fields_whitelisted
        markdown_fields.each_with_object([]) do |field, fields|
          if @data[field].fetch(:whitelisted, false)
            fields << html_field(field)
          end
        end
      end
    end
  end
end