module Agents
  class ManualEventAgent < Agent
    cannot_be_scheduled!
    cannot_receive_events!

    description <<-MD
      The Manual Event Agent is used to manually create Events for testing or other purposes.

      Connect this Agent to other Agents and create Events using the UI provided on this Agent's Summary page.

      You can set the default event payload via the "payload" option.
    MD

    event_description do
      "Events are editable in the UI.  The default value is this:\n\n    " +
        Utils.pretty_print(options["payload"].presence || {})
    end

    def default_options
      { "payload" => {} }
    end

    def handle_details_post(params)
      if params['payload']
        json = interpolate_options(JSON.parse(params['payload']))
        if json['payloads'] && (json.keys - ['payloads']).length > 0
          { :success => false, :error => "If you provide the 'payloads' key, please do not provide any other keys at the top level." }
        else
          [json['payloads'] || json].flatten.each do |payload|
            create_event(:payload => payload)
          end
          { :success => true }
        end
      else
        { :success => false, :error => "You must provide a JSON payload" }
      end
    end

    def working?
      true
    end

    def validate_options
    end
  end
end
