# frozen_string_literal: true

module Api
  module Messages
    class MailboxesController < ApiController
      before_action :authorize

      authorize_resource :message

      before_action :set_request_formats

      private

      def show_messages
        @messages = @messages.where(:muted => false)
        if params[:order].nil? || params[:order] == "newest"
          @messages = @messages.where(:id => ..params[:from_id]) unless params[:from_id].nil?
          @messages = @messages.order(:id => :desc)
        elsif params[:order] == "oldest"
          @messages = @messages.where(:id => params[:from_id]..) unless params[:from_id].nil?
          @messages = @messages.order(:id => :asc)
        else
          raise OSM::APIBadUserInput, "Invalid order specified"
        end

        limit = params[:limit]
        if !limit
          limit = Settings.default_message_query_limit
        elsif !limit.to_i.positive? || limit.to_i > Settings.max_message_query_limit
          raise OSM::APIBadUserInput, "Messages limit must be between 1 and #{Settings.max_message_query_limit}"
        else
          limit = limit.to_i
        end

        @messages = @messages.limit(limit)

        # Render the result
        respond_to do |format|
          format.xml
          format.json
        end
      end
    end
  end
end
