<%
%i[label field error help after_help].each do |key|
  if (content = content_for(key).presence)
    flush_content_for key
    partial.section key, content
  end
end
%>

<%
form ||= current_fields_form
# returns a struct with `label`, `placeholder`, and `help` methods.
labels = labels_for(form, method)
options ||= {}
options[:id] ||= form.field_id(method)
# options[:disabled] ||= !field_editable?(form.object, method) if user_signed_in?
options[:placeholder] ||= labels.placeholder if labels.placeholder
other_options ||= {}
other_options[:help] = [other_options[:help], labels.help].compact.join(" ")

errors = [method, method.to_s.gsub(/_id$/, '').to_sym].uniq.map { |attribute| form.object.errors.full_messages_for(attribute) }.flatten
has_errors = errors.any? || partial.error? || other_options[:error].present?

options[:class] = "#{options[:class]} block w-full rounded-md shadow-sm font-light text-base md:text-sm"

options[:class] += if has_errors
  " pr-10 border-red text-red-700 placeholder-red focus:outline-none focus:ring-red focus:border-red"
else
  " focus:ring-blue focus:border-blue border-slate-300"
end

%>

<div class="<%= 'required' if presence_validated?(form.object, method) %>">

  <% # the label. %>
  <% unless other_options[:hide_label] == true %>
    <% if partial.label? %>
      <%= partial.label %>
    <% else %>
      <% # allow the label to be defined via an inline option or else one of the locale yaml definitions. %>
      <% label = (other_options[:label].presence || labels.label || legacy_label_for(form, method)) %>
      <%= form.label method, label&.html_safe, class: 'block', for: options[:id] %>
    <% end %>
  <% end %>

  <div class="mt-1.5">
    <% # the actual field. %>
    <% if partial.field? %>
      <%= partial.field %>
    <% else %>
      <% # e.g. form.text_field(method, options) %>
      <%= form.send(helper, method, options) %>
    <% end %>
  </div>

  <% # any error messages. %>
  <% if has_errors %>
    <p class="mt-1.5 text-xs text-red">
      <%= errors.map { |error| error + ". " }.join %>
      <%= partial.error %>
      <%= other_options[:error]&.html_safe %>
    </p>
  <% end %>

  <% # any help text. %>
  <% if partial.help? || other_options[:help] || partial.after_help? %>
    <p class="mt-1.5 text-xs text-slate-500">
      <%= partial.help %>
      <%= other_options[:help]&.html_safe %>
      <%= partial.after_help %>
    </p>
  <% end %>

  <% if other_options[:icon] %>
  <div class="pre-icon os-icon <%= other_options[:icon] %>"></div>
  <% end %>

</div>