class JobTemplatesController

def action_permission

def action_permission
  case params[:action]
    when 'auto_complete_job_category', 'export'
      :view_job_templates
    else
      super
  end
end

def auto_complete_job_category

def auto_complete_job_category
  @job_categories = resource_base.where(['job_category LIKE ?', "%#{params[:search]}%"]).pluck(:job_category).uniq
  render :json => @job_categories.map { |name| { 'completed' => '', 'part' => name, 'label' => name, 'category' => '' } }.to_json
end

def find_resource

def find_resource
  if params[:id]
    super
  else
    @template = resource_class.new(params[type_name_plural])
  end
end

def import

def import
  contents = params.fetch(:imported_template, {}).fetch(:template, nil).try(:read)
  @template = JobTemplate.import_raw(contents, :update => ActiveRecord::Type::Boolean.new.deserialize(params[:imported_template][:overwrite]))
  if @template&.save
    flash[:success] = _('Job template imported successfully.')
    redirect_to job_templates_path(:search => "name = \"#{@template.name}\"")
  else
    @template ||= JobTemplate.import_raw(contents, :build_new => true)
    @template.valid?
    flash[:warning] = _('Unable to save template. Correct highlighted errors')
    render :action => 'new'
  end
end

def load_vars_from_template

def load_vars_from_template
  return unless @template
  @locations        = @template.locations
  @organizations    = @template.organizations
end

def preview

def preview
  find_resource if @template.blank?
  base = Host.authorized(:view_hosts, Host)
  host = params[:preview_host_id].present? ? base.find(params[:preview_host_id]) : base.first
  @template.template = params[:template]
  renderer = InputTemplateRenderer.new(@template, host)
  output = renderer.preview
  if output
    render :plain => output
  else
    render status: :not_acceptable,
      plain: _(
        'Problem with previewing the template: %{error}. Note that you must save template input changes before you try to preview it.' %
        {:error => renderer.error_message}
      )
  end
end