# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0

# Purpose
# This code example demonstrates how to:
# 1. Get a list of your queues.
# 2. Create a queue.
# 3. Get the queue's URL.
# 4. Delete the queue.

# snippet-start:[ruby.example_code.sqs.ScenarioGettingStarted]

require 'aws-sdk-sqs' # v2: require 'aws-sdk'
# Replace us-west-2 with the AWS Region you're using for Amazon SQS.
sqs = Aws::SQS::Client.new(region: 'us-west-2')

# Get a list of your queues.
sqs.list_queues.queue_urls.each do |queue_url|
  puts queue_url
end

# Create a queue.
queue_name = 'my-queue'

begin
  sqs.create_queue({
                     queue_name: queue_name,
                     attributes: {
                       'DelaySeconds' => '60', # Delay message delivery for 1 minute (60 seconds).
                       'MessageRetentionPeriod' => '86400' # Delete message after 1 day (24 hours * 60 minutes * 60 seconds).
                     }
                   })
rescue Aws::SQS::Errors::QueueDeletedRecently
  puts "A queue with the name '#{queue_name}' was recently deleted. Wait at least 60 seconds and try again."
  exit(false)
end

# Get the queue's URL.
queue_url = sqs.get_queue_url(queue_name: queue_name).queue_url
puts queue_url

begin
  # Create a message with three custom attributes: Title, Author, and WeeksOn.
  send_message_result = sqs.send_message({
                                           queue_url: queue_url,
                                           message_body: 'Information about current NY Times fiction bestseller for week of 2016-12-11.',

                                           message_attributes: {
                                             'Title' => {
                                               string_value: 'The Whistler',
                                               data_type: 'String'
                                             },
                                             'Author' => {
                                               string_value: 'John Grisham',
                                               data_type: 'String'
                                             },
                                             'WeeksOn' => {
                                               string_value: '6',
                                               data_type: 'Number'
                                             }
                                           }
                                         })
  puts send_message_result.message_id
rescue Aws::SQS::Errors::NonExistentQueue
  puts "A queue named '#{queue_name}' does not exist."
  exit(false)
end

# Receive the message in the queue.
receive_message_result = sqs.receive_message({
                                               queue_url: queue_url,
                                               message_attribute_names: ['All'], # Receive all custom attributes.
                                               max_number_of_messages: 1, # Receive at most one message.
                                               wait_time_seconds: 0 # Do not wait to check for the message.
                                             })

# Display information about the message.
# Display the message's body and each custom attribute value.
receive_message_result.messages.each do |message|
  puts message.body
  puts "Title: #{message.message_attributes['Title']['string_value']}"
  puts "Author: #{message.message_attributes['Author']['string_value']}"
  puts "WeeksOn: #{message.message_attributes['WeeksOn']['string_value']}"

  # Delete the message from the queue.
  sqs.delete_message({
                       queue_url: queue_url,
                       receipt_handle: message.receipt_handle
                     })
end

# Delete the queue.
sqs.delete_queue(queue_url: queue_url)
# snippet-end:[ruby.example_code.sqs.ScenarioGettingStarted]
