#!/usr/bin/env ruby
require File.expand_path("../../config/environment", File.dirname(__FILE__))
require "optparse"

# Sample usage: script/flood-room --room 16384 --count 100

def parse_options!
  options = {}

  parser = OptionParser.new do |opts|
    opts.banner = "Usage: ruby script/development/flood_topic.rb [options]"

    opts.on "--room ROOM-ID", Integer, "Room ID to flood" do |room_id|
      options[:room_id] = room_id
    end

    opts.on "--count COUNT", Integer, "Number of messages to send" do |count|
      options[:count] = count
    end

    opts.on "--sleep SECONDS", Float, "How long to sleep between messages" do |sleep_interval|
      options[:sleep] = sleep_interval
    end

    opts.on "-h", "--help", "Prints this help" do
      puts opts
      exit
    end
  end.tap(&:parse!)

  if options[:room_id].blank?
    warn(parser.help)
    exit(1)
  else
    options
  end
end

options = parse_options!

words = %w[
  tacit watch store rinse bead rich idea raise draconian well-made interesting root
  groan cows wine copper puffy tip fill spurious precede scorch lunch place
  title mute wait relax gainful rabid preach freezing scandalous nebulous remain coast
]

room = Room.find options[:room_id]
users = room.users

count = options[:count] || 20
sleep_interval = options[:sleep] || 0

count.times do |n|
  sentence = words.sample(rand(20) + 1).join(" ")
  creator = users.sample
  message_params = { room: room, client_message_id: Random.uuid, body: "%04d #{sentence}" % n, creator: creator }

  message = Message.create! message_params
  message.broadcast_append_to room, :messages, target: [ room, :messages ]

  puts n if n > 0 && n % 10 == 0
  sleep sleep_interval
end

puts "done"
