# frozen_string_literal: true

module <%= options[:namespace].camelize %>
  class <%= class_name.pluralize %>Controller < <%= options[:namespace].singularize.camelize %>Controller
    before_action :set_<%= class_name.underscore %>, only: %i[show edit destroy update]

    def index
      @q = <%=class_name%>.ransack(params[:q])
      @pagy, @<%= class_name.pluralize.underscore %> = pagy(@q.result(distinct: true))
    end

    def show; end

    def new
      @<%= class_name.underscore %> = <%= class_name %>.new
    end

    def create
      @<%= class_name.underscore %> = <%= class_name %>.new(<%= class_name.underscore %>_params)

      if @<%= class_name.underscore %>.save
        flash[:success] = t('bo.record.created')
        redirect_to <%="#{options[:namespace]}_#{class_name.underscore.pluralize}_path"%>
        
      else
        render :new, status: :unprocessable_entity
      end
    end

    def edit; end

    def update
      if @<%= class_name.underscore %>.update(<%= class_name.underscore %>_params)
        flash[:success] = t('bo.record.updated')
        redirect_to <%="#{options[:namespace]}_#{class_name.underscore}_path"%>
      else
        render :show, status: :unprocessable_entity
      end
    end

    def destroy
      @<%= class_name.underscore %>.destroy
      flash[:success] = t('bo.record.destroyed')

      redirect_to <%="#{options[:namespace]}_#{class_name.underscore.pluralize}_path"%>, status: :see_other
    end
        
    private

    def set_<%= class_name.underscore %>
      @<%= class_name.underscore %> = <%= class_name %>.find(params[:id])
    end

    def <%= class_name.underscore %>_params
      params.require(:<%= class_name.underscore %>).permit(
      <%-permited_params.each_with_index do |(key, value), index| -%>
        <%- if value.nil? -%>
        :<%= key %><%=permited_params.count == (index +1) ? '' : ',' %>
        <%- else -%>
        <%= "#{key}: []" %><%=permited_params.count == (index +1) ? '' : ',' %>
        <%- end -%>
        <%- end -%>
      )
    end
  end
end