/*
 * Copyright (c) 2014 Spotify AB.
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package com.spotify.helios.cli.command;

import com.spotify.helios.cli.Utils;
import com.spotify.helios.client.HeliosClient;
import com.spotify.helios.common.descriptors.JobId;
import com.spotify.helios.common.protocol.JobDeleteResponse;

import net.sourceforge.argparse4j.impl.Arguments;
import net.sourceforge.argparse4j.inf.Argument;
import net.sourceforge.argparse4j.inf.Namespace;
import net.sourceforge.argparse4j.inf.Subparser;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintStream;
import java.util.concurrent.ExecutionException;

public class JobRemoveCommand extends WildcardJobCommand {

  private static final Logger log = LoggerFactory.getLogger(JobRemoveCommand.class);

  private final Argument yesArg;
  private final Argument forceArg;

  public JobRemoveCommand(Subparser parser) {
    super(parser);

    parser.help("remove a job");

    yesArg = parser.addArgument("--yes")
        .action(Arguments.storeTrue())
        .help("Automatically answer 'yes' to the interactive prompt.");

    // TODO (dxia) Deprecated, remove at a later date
    forceArg = parser.addArgument("--force")
        .action(Arguments.storeTrue())
        .help("Automatically answer 'yes' to the interactive prompt.");
  }

  @Override
  protected int runWithJobId(final Namespace options, final HeliosClient client,
                             final PrintStream out, final boolean json, final JobId jobId,
                             final BufferedReader stdin)
      throws IOException, ExecutionException, InterruptedException {
    final boolean yes = options.getBoolean(yesArg.getDest());
    final boolean force = options.getBoolean(forceArg.getDest());

    if (force) {
      log.warn("If you are using '--force' to skip the interactive prompt, " +
               "note that we have deprecated it. Please use '--yes'.");
    }

    if (!yes && !force) {
      out.printf("This will remove the job %s%n", jobId);
      final boolean confirmed = Utils.userConfirmed(out, stdin);
      if (!confirmed) {
        return 1;
      }
    }

    out.printf("Removing job %s%n", jobId);

    int code = 0;

    final JobDeleteResponse response = client.deleteJob(jobId).get();
    out.printf("%s: ", jobId);
    if (response.getStatus() == JobDeleteResponse.Status.OK) {
      out.printf("done%n");
    } else {
      out.printf("failed: %s%n", response);
      code = 1;
    }
    return code;
  }
}

@@ -2968,24 +2968,43 @@
    %7D%0A    %7D%0A%0A
+    if (!json) %7B%0A  
     out.prin
@@ -3034,16 +3034,22 @@
  jobId);
+%0A    %7D
 %0A%0A    in
@@ -3131,16 +3131,35 @@
 .get();%0A
+    if (!json) %7B%0A  
     out.
@@ -3177,24 +3177,30 @@
  %22, jobId);%0A
+    %7D%0A
     if (resp
@@ -3246,24 +3246,104 @@
 tatus.OK) %7B%0A
+      if (json) %7B%0A        out.printf(response.toJsonString());%0A      %7D else %7B%0A  
       out.pr
@@ -3354,24 +3354,32 @@
 (%22done%25n%22);%0A
+      %7D%0A
     %7D else %7B
@@ -3375,24 +3375,104 @@
    %7D else %7B%0A
+      if (json) %7B%0A        out.printf(response.toJsonString());%0A      %7D else %7B%0A  
       out.pr
@@ -3503,16 +3503,24 @@
 ponse);%0A
+      %7D%0A
       co

Remove command now honors --json flag