# frozen_string_literal: true
module Formtastic
  module Inputs
    module Base
      module Labelling
        
        include Formtastic::LocalizedString
        
        def label_html
          render_label? ? builder.label(input_name, label_text, label_html_options) : +"".html_safe
        end
        
        def label_html_options
          {
            :for => input_html_options[:id],
            :class => ['label'],
          }.merge(options[:label_html] || {})
        end
        
        def label_text
          ((localized_label || humanized_method_name) + requirement_text).html_safe
        end
        
        # TODO: why does this need to be memoized in order to make the inputs_spec tests pass? 
        def requirement_text_or_proc
          @requirement_text_or_proc ||= required? ? builder.required_string : builder.optional_string
        end
        
        def requirement_text
          if requirement_text_or_proc.respond_to?(:call)
            requirement_text_or_proc.call
          else
            requirement_text_or_proc
          end
        end

        def label_from_options
          options[:label]
        end

        def localized_label
          localized_string(method, label_from_options || method, :label)
        end
        
        def render_label?
          return false if options[:label] == false
          true
        end
        
      end
    end
  end
end
