// 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 "shill/cli/command.h"

namespace shill_cli {

class TopCommand : public Command {
 public:
  TopCommand() : Command("shillcli", "Shill Command Line Interface") {
    // TODO(akhouderchah) 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_
