class Admin::UsersController < Admin::BaseController

  include Admin::InheritedResource

  # Method to resend the activation email to user.
  def resend_activation
    unless resource.active?
      UserMailer.delay(queue: :mailer).activation_needed_email(resource.id, true)
      @message = 'Activation email send to user.'
    else
      @message = "User is already activated."
    end
    respond_to do |format|
      format.js {}
    end
  end

  # Method to update the user i.e. set user as active.
  def activate
    respond_to do |format|
      if resource.update_attribute(:is_manually_deactivated, 'false')
        format.js {render 'referesh_datatable'}
      else
        format.js {redirect_to collection_path, alert: 'Unable to activate.'}
      end
    end
  end

  # Method to update the user i.e. set user as deactive.
  def deactivate
    respond_to do |format|
      if resource.update_attribute(:is_manually_deactivated, 'true')
        format.js {render 'referesh_datatable'}
      else
        format.js {redirect_to collection_path, alert: 'Unable to deactivate.'}
      end
    end
  end

  # Method to update user as admin.
  def mark_admin
    respond_to do |format|
      if resource.update_attribute(:admin, '1')
        format.js {render 'referesh_datatable'}
      else
        format.js {redirect_to collection_path, alert: 'Unable to add as admin.'}
      end
    end
  end

  # Method to update user i.e. admin set to false
  def unmark_admin
    respond_to do |format|
      if resource.update_attribute(:admin, '0')
        format.js {render 'referesh_datatable'}
      else
        format.js {redirect_to collection_path, alert: 'Unable to remove from admin.'}
      end
    end
  end

  # Method to find and edit the user.
  def edit
    @user = User.find(params[:id])
  end

  # Method to find and update the user.
  def update
    @user = User.find(params[:id])
    @user.update_searchable = true
    @user.attributes = params[:tutor]
    if @user.save(:validate => false)
      flash[:notice] = "User has been updated successfully."
      render :update
    end
  end

  # Method to get all searchable records of user.
  def upload_image
    @user = User.find(params[:id])
    @user.update_attributes(user_params)
  end

  # Method to find and fetch all user request logs.
  def user_activity
    @user = User.find(params[:id])
    @request_log = @user.request_logs
  end

  # Method to find user.
  def user_transactions
    @user = User.find(params[:id])
  end

  # Method to find user.
  def user_transfers
    @user = User.find(params[:id])
  end

  # Method to find user.
  def user_charges
    @user = User.find(params[:id])
  end

  private

  def user_params
    params.required((@user.try(:type) || 'User').downcase.to_sym).permit(
      profile_image_attributes: [:crop_x, :crop_y, :crop_w, :crop_h, :image, :id]
    )
  end

end
