class Internal::OrganizationsController < Internal::ApplicationController
  layout "internal"

  CREDIT_ACTIONS = {
    add: :add_to,
    remove: :remove_from
  }.with_indifferent_access.freeze

  def index
    @organizations = Organization.order(name: :desc).page(params[:page]).per(50)

    return if params[:search].blank?

    @organizations = @organizations.where(
      "name ILIKE ?",
      "%#{params[:search].strip}%",
    )
  end

  def show
    @organization = Organization.find(params[:id])
  end

  def update_org_credits
    org = Organization.find(params[:id])
    amount = params[:credits].to_i
    update_action = CREDIT_ACTIONS.fetch(params[:credit_action])

    Credit.public_send(update_action, org, amount)
    add_note(org)

    flash[:notice] = "Sucessfully updated credits"
    redirect_to internal_organization_path(org)
  end

  private

  def add_note(org)
    Note.create(
      author_id: current_user.id,
      noteable_id: org.id,
      noteable_type: "Organization",
      reason: "misc_note",
      content: params[:note],
    )
  end
end
