module ForemanBootdisk::HostsHelperExt
  def host_title_actions(*args)
    if @host.bootdisk_downloadable?
      title_actions(
        button_group(
          select_action_button(_('Boot disk'), {:class => 'btn btn-group'},
            display_bootdisk_link_if_authorized(_("Host '%s' image") % @host.name.split('.')[0], {:controller => 'foreman_bootdisk/disks', :action => 'host', :id => @host}, :class=>'la'),
            display_bootdisk_link_if_authorized(_("Full host '%s' image") % @host.name.split('.')[0], {:controller => 'foreman_bootdisk/disks', :action => 'full_host', :id => @host}, :class=>'la'),
            content_tag(:li, "", :class => "divider"),
            display_bootdisk_link_if_authorized(_("Generic image"), {:controller => 'foreman_bootdisk/disks', :action => 'generic'}, :class=>'la'),
            display_bootdisk_for_subnet,
            content_tag(:li, "", :class => "divider"),
            display_bootdisk_link_if_authorized(_("Help"), {:controller => 'foreman_bootdisk/disks', :action => 'help'}, :class=>'la')
          )
        )
      )
    else
      bootdisk_button_disabled
    end

    super
  end

  def bootdisk_button_disabled
    title_actions(
      button_group(
        link_to(_("Boot disk"), '#', :disabled => true, :class => 'btn btn-default',
                :title => _("Boot disk download not available for %s architecture") % @host.architecture.name)
      )
    )
  end

  # need to wrap this one in a test for template proxy presence
  def display_bootdisk_for_subnet
    if (proxy = @host.try(:subnet).try(:tftp)) && proxy.has_feature?('Templates')
      display_bootdisk_link_if_authorized(_("Subnet '%s' generic image") % @host.subnet.name, {:controller => 'foreman_bootdisk/disks', :action => 'subnet', :id => @host}, :class=>'la')
    else
      ""
    end
  end

  # Core Foreman helpers can't look up a URL against a mounted engine
  def display_bootdisk_link_if_authorized(name, options = {}, html_options = {})
    if bootdisk_authorized_for(options)
      link_to(name, bootdisk_url(options), html_options)
    else
      ""
    end
  end

  def bootdisk_url(options)
    ForemanBootdisk::Engine.routes.url_for(options.merge(:only_path => true, :script_name => foreman_bootdisk_path))
  end

  def bootdisk_authorized_for(options)
    User.current.allowed_to?(options)
  end
end