class Playbook::PbTextInput::TextInput

def add_on_class

def add_on_class
  has_add_on? ? "text_input_wrapper_add_on" : nil
end

def add_on_props

def add_on_props
  { dark: dark }.merge(add_on || {})
end

def all_input_options

def all_input_options
  {
    autocomplete: autocomplete ? nil : "off",
    class: "text_input #{input_options.dig(:classname) || ''}",
    data: validation_data,
    disabled: disabled,
    id: input_options.dig(:id) || id,
    name: mask.present? ? "" : name,
    pattern: validation_pattern || mask_pattern,
    placeholder: placeholder,
    required: required,
    type: type,
    value: value,
    mask: mask,
  }.merge(input_options)
end

def classname

def classname
  default_margin_bottom = margin_bottom.present? ? "" : " mb_sm"
  generate_classname("pb_text_input_kit") + default_margin_bottom + error_class + inline_class
end

def error_class

def error_class
  error ? " error" : ""
end

def has_add_on?

def has_add_on?
  add_on.present?
end

def inline_class

def inline_class
  inline ? " inline" : ""
end

def input_tag

def input_tag
  tag(:input, all_input_options)
end

def mask_data

def mask_data
  return {} unless mask
  raise ArgumentError, "mask must be one of: #{VALID_MASKS.join(', ')}" unless VALID_MASKS.include?(mask)
  { mask: mask }
end

def mask_pattern

def mask_pattern
  return nil unless mask
  MASK_PATTERNS[mask]
end

def sanitized_id

def sanitized_id
  "#{object.id}-sanitized" if id.present?
end

def validation_data

def validation_data
  fields = input_options.dig(:data) || {}
  fields[:message] = validation_message unless validation_message.blank?
  mask ? fields.merge(pb_input_mask: true) : fields
end

def validation_message

def validation_message
  validation[:message] || ""
end

def validation_pattern

def validation_pattern
  validation[:pattern] || nil
end