#!/usr/bin/env ruby
# require_relative '../config/boot'
# require_relative '../config/application'
require_relative '../config/environment'
Rails.application.eager_load!

puts 'Starting queue..'

kinesis = Aws::Kinesis::Client.new
stream = kinesis.describe_stream(
  stream_name: ENV['KINESIS_STREAM'],
  limit: 1
)
shard_id = stream.stream_description.shards[0].shard_id
shard_iterator = kinesis.get_shard_iterator(
  stream_name: ENV['KINESIS_STREAM'],
  shard_id: shard_id,
  shard_iterator_type: 'LATEST'
).shard_iterator

while true do
  resp = kinesis.get_records(
    shard_iterator: shard_iterator
  )
  shard_iterator = resp.next_shard_iterator

  if resp.records.any?
    for record in resp.records do
      data = Hashie::Mash.new(JSON.parse(record.data))
      case data.type
      when 'USER_CHANGE' then
        # When a user's email changes, we update their Person to be a member
        # in all orgs for that email addresses domain.
        Person.handle_user_change(data)
      end
    end
  end

  sleep 1
  $stdout.flush
end
