package com.martinkl.samza.newsfeed;

import java.util.HashMap;

import org.apache.samza.system.IncomingMessageEnvelope;
import org.apache.samza.system.OutgoingMessageEnvelope;
import org.apache.samza.task.MessageCollector;
import org.apache.samza.task.StreamTask;
import org.apache.samza.task.TaskCoordinator;
import org.apache.samza.task.WindowableTask;

/**
 * Generates fake messages posted by a given number of fake users, by emitting
 * "postMessage" events. The output is partitioned by sender.
 */
public class GenerateMessagesTask implements StreamTask, WindowableTask {

  @Override
  public void process(IncomingMessageEnvelope envelope, MessageCollector collector, TaskCoordinator coordinator) {
    // no input streams, nothing to process
  }

  @Override
  public void window(MessageCollector collector, TaskCoordinator coordinator) {
    for (int i = 0; i < NewsfeedConfig.MESSAGES_PER_WINDOW; i++) {
      String sender = NewsfeedConfig.randomUser();

      HashMap<String, Object> message = new HashMap<String, Object>();
      message.put("event", "postMessage");
      message.put("sender", sender);
      message.put("text", "Hello world");
      message.put("time", NewsfeedConfig.currentDateTime());
      collector.send(new OutgoingMessageEnvelope(NewsfeedConfig.MESSAGES_STREAM, sender, null, message));
    }
  }
}