// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SHILL_CLI_TOP_COMMAND_H_
#define SHILL_CLI_TOP_COMMAND_H_

#include <memory>

#include <base/bind.h>
#include <base/logging.h>

#include "shill/cli/command.h"

namespace shill_cli {

class TopCommand : public Command {
 public:
  TopCommand() : Command("shillcli", "Shill Command Line Interface") {
    // TODO(crbug.com/1024079) Replace these with actual functional commands
    // (most of these will likely have their own child class). Having this is
    // useful for testing.
    AddSubcommand("device", "Interact with Devices", base::Bind([]() {
                    LOG(INFO) << "Device was called";
                    return true;
                  }));
    AddSubcommand("service", "Interact with Services", base::Bind([]() {
                    LOG(INFO) << "Service was called";
                    return true;
                  }));
    AddSubcommand("log", "Testing log", base::Bind([]() {
                    LOG(INFO) << "Log was called";
                    return true;
                  }));
    AddSubcommand("list", "Testing list", base::Bind([]() {
                    LOG(INFO) << "List was called";
                    return true;
                  }));
  }

  bool Top() override {
    LOG(INFO) << "{Insert top-level shill status here}";
    LOG(INFO) << "";
    LOG(INFO) << "See `" << full_name() << " help` for more commands.";
    return true;
  }
};

}  // namespace shill_cli

#endif  // SHILL_CLI_TOP_COMMAND_H_
