module PoliciesHelper

def config_inline_help(help_hash)

def config_inline_help(help_hash)
  link = if help_hash[:route_helper_method] && respond_to?(help_hash[:route_helper_method])
           link_to_if_authorized help_hash[:replace_text], public_send(help_hash[:route_helper_method])
         else
           help_hash[:replace_text]
         end
  text = help_hash[:text]
  text = text.split(help_hash[:replace_text], 2).join(link) if help_hash.key?(:replace_text)
  text.html_safe
end

def days_of_week_hash

def days_of_week_hash
  Hash[*Date::DAYNAMES.map { |day| [day.downcase, day] }.flatten]
end

def deploy_by_radio_checked(policy, tool)

def deploy_by_radio_checked(policy, tool)
  type = policy.deploy_by ? policy.deploy_by.to_sym : :manual
  tool.type == type
end

def deploy_by_radios(f, policy)

def deploy_by_radios(f, policy)
  ForemanOpenscap::ConfigNameService.new.configs.map do |tool|
    popover_block = tag.span(popover("", config_inline_help(tool.inline_help)), class: 'scap_policy_popover')
    label = label_tag('', :class => 'col-md-2 control-label', :for => "policy_deploy_by_#{tool.type}") do
      tool.type.to_s.capitalize.html_safe
    end
    radio = content_tag(:div, :class => "col-md-2") do
      f.radio_button(:deploy_by, tool.type, :disabled => !tool.available?, :checked => deploy_by_radio_checked(policy, tool))
    end
    content_tag(:div, :class => "clearfix") do
      content_tag(:div, :class => "form-group") do
        label.html_safe + popover_block.html_safe + radio.html_safe
      end
    end
  end.join('').html_safe
end

def effective_policy_profile(policy)

def effective_policy_profile(policy)
  policy.tailoring_file ? policy.tailoring_file_profile.title : policy_profile_from_scap_content(policy)
end

def policy_profile_from_scap_content(policy)

def policy_profile_from_scap_content(policy)
  policy.scap_content_profile.nil? ? "Default" : policy.scap_content_profile.title
end

def previous_link(form)

def previous_link(form)
  previous = content_tag(:span, "", :class => 'glyphicon glyphicon-chevron-left')
  content_tag(:div, :class => 'pull-left') do
    link_to(previous.html_safe, '#', :class => 'btn btn-default', :onclick => "previous_step('#{@policy.previous_step}')")
  end
end

def profiles_selection

def profiles_selection
  return @scap_content.scap_content_profiles if @scap_content.present?
  return @policy.scap_content.scap_content_profiles if @policy.scap_content.present?
  return []
end

def scap_content_profile_selector(form)

def scap_content_profile_selector(form)
  if profiles_selection.length == 1
    select_f form, :scap_content_profile_id, profiles_selection, :id, :title,
             { :selected => @policy.scap_content_profile_id },
             { :label => _("XCCDF Profile"),
               :disabled => profiles_selection.empty? ? true : false,
               :help_inline => :indicator }
  else
    select_f form, :scap_content_profile_id, profiles_selection, :id, :title,
             { :selected => @policy.scap_content_profile_id,
               :include_blank => _("Default XCCDF profile") },
             { :label => _("XCCDF Profile"),
               :disabled => profiles_selection.empty? ? true : false,
               :help_inline => :indicator }
  end
end

def scap_content_selector(form)

def scap_content_selector(form)
  scap_contents = ::ForemanOpenscap::ScapContent.authorized(:view_scap_contents).all
  if scap_contents.length > 1
    select_f form, :scap_content_id, scap_contents, :id, :title,
             { :include_blank => _("Choose existing SCAP Content") },
             { :label => _("SCAP Content"),
               :required => true,
               :onchange => 'scap_content_selected(this);',
               :'data-url' => method_path('scap_content_selected') }
  else
    select_f form, :scap_content_id, scap_contents, :id, :title,
             { :label => _("SCAP Content"),
               :required => true,
               :onchange => 'scap_content_selected(this);',
               :'data-url' => method_path('scap_content_selected') }
  end
end

def show_partial_wizard(step)

def show_partial_wizard(step)
  @policy.current_step == step ? 'show-pane' : 'hide-pane'
end

def submit_or_cancel_policy(form, overwrite = nil, args = {})

def submit_or_cancel_policy(form, overwrite = nil, args = {})
  args[:cancel_path] ||= send("#{controller_name}_path")
  content_tag(:div, :class => "clearfix") do
    content_tag(:div, :class => "form-actions") do
      text    = overwrite ? overwrite : _("Submit")
      options = { :class => "btn btn-primary" }
      previous = form.object.first_step? ? ' ' : previous_link(form)
      cancel_and_submit = content_tag(:div, :class => "pull-right") do
        link_to(_("Cancel"), args[:cancel_path], :class => "btn btn-default") + ' ' +
            form.submit(text, options)
      end
      (previous + cancel_and_submit).html_safe
    end
  end
end

def tailoring_file_profile_selector(form, tailoring_file)

def tailoring_file_profile_selector(form, tailoring_file)
  if tailoring_file
    select_f form, :tailoring_file_profile_id, tailoring_file.scap_content_profiles, :id, :title,
             { :selected => @policy.tailoring_file_profile_id },
             { :label => _("XCCDF Profile in Tailoring File"),
               :help_inline => _("This profile will be used to override the one from scap content") }
  else
    # to make sure tailoring profile id is nil when tailoring file is deselected
    form.hidden_field(:tailoring_file_profile_id, :value => nil)
  end
end

def tailoring_file_selector(form)

def tailoring_file_selector(form)
  select_f form, :tailoring_file_id, ForemanOpenscap::TailoringFile.all.authorized(:view_tailoring_files), :id, :name,
           { :include_blank => _('Choose Tailoring File') },
           { :label => _('Tailoring File'),
             :onchange => 'tailoring_file_selected(this)',
             :'data-url' => method_path('tailoring_file_selected') }
end

def translate_steps(policy)

def translate_steps(policy)
  policy.steps.map { |step| _(step) }
end