/**
 * 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
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * 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 org.apache.hadoop.hdds.scm.cli.datanode;

import org.apache.hadoop.hdds.cli.HddsVersionProvider;
import org.apache.hadoop.hdds.scm.cli.ScmSubcommand;
import org.apache.hadoop.hdds.scm.client.ScmClient;
import picocli.CommandLine;
import picocli.CommandLine.Command;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Place one or more datanodes into Maintenance Mode.
 */
@Command(
    name = "maintenance",
    description = "Put a datanode into Maintenance Mode",
    mixinStandardHelpOptions = true,
    versionProvider = HddsVersionProvider.class)
public class MaintenanceSubCommand extends ScmSubcommand {

  @CommandLine.Parameters(description = "List of fully qualified host names")
  private List<String> hosts = new ArrayList<String>();

  @CommandLine.Option(names = {"--end"},
      description = "Automatically end maintenance after the given hours. "+
          "By default, maintenance must be ended manually.")
  private int endInHours = 0;

  @Override
  public void execute(ScmClient scmClient) throws IOException {
    scmClient.startMaintenanceNodes(hosts, endInHours);
  }
}