package com.pinterest.doctorkafka.tools;

import com.pinterest.doctorkafka.DoctorKafkaActionReporter;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.kafka.common.security.auth.SecurityProtocol;

public class DoctorKafkaActionWriter {

  private static final String ZOOKEEPER = "zookeeper";
  private static final String TOPIC = "topic";
  private static final String MESSAGE = "message";
  private static final Options options = new Options();

  /**
   *  Usage:  KafkaWriter  \
   *             --zookeeper zookeeper001:2181/cluster1 --topic kafka_test    \
   *             --message "this is a test message"
   */
  private static CommandLine parseCommandLine(String[] args) {
    Option zookeeper = new Option(ZOOKEEPER, true, "zookeeper connection string");
    Option topic = new Option(TOPIC, true, "action report topic name");
    Option message = new Option(MESSAGE, true, "messags that writes to kafka");
    options.addOption(zookeeper).addOption(topic).addOption(message);

    if (args.length < 6) {
      printUsageAndExit();
    }

    CommandLineParser parser = new DefaultParser();
    CommandLine cmd = null;
    try {
      cmd = parser.parse(options, args);
    } catch (ParseException | NumberFormatException e) {
      printUsageAndExit();
    }
    return cmd;
  }

  private static void printUsageAndExit() {
    HelpFormatter formatter = new HelpFormatter();
    formatter.printHelp("OperatorActionWriter", options);
    System.exit(1);
  }


  public static void main(String[] args) throws Exception {
    CommandLine commandLine = parseCommandLine(args);
    String zkUrl = commandLine.getOptionValue(ZOOKEEPER);
    String topic = commandLine.getOptionValue(TOPIC);
    String message = commandLine.getOptionValue(MESSAGE);

    DoctorKafkaActionReporter actionReporter =
        new DoctorKafkaActionReporter(zkUrl, SecurityProtocol.PLAINTEXT, topic, null);
    actionReporter.sendMessage("testkafka10", message);
  }
}