// -*- C++ -*-
//
// This file was generated by CLI, a command line interface
// compiler for C++.
//

#ifndef BBOT_AGENT_AGENT_OPTIONS_HXX
#define BBOT_AGENT_AGENT_OPTIONS_HXX

// Begin prologue.
//
//
// End prologue.

#include <libbbot/manifest.hxx>

#include <bbot/common-options.hxx>

namespace bbot
{
  class agent_options
  {
    public:
    agent_options ();

    // Return true if anything has been parsed.
    //
    bool
    parse (int& argc,
           char** argv,
           bool erase = false,
           ::bbot::cli::unknown_mode option = ::bbot::cli::unknown_mode::fail,
           ::bbot::cli::unknown_mode argument = ::bbot::cli::unknown_mode::stop);

    bool
    parse (int start,
           int& argc,
           char** argv,
           bool erase = false,
           ::bbot::cli::unknown_mode option = ::bbot::cli::unknown_mode::fail,
           ::bbot::cli::unknown_mode argument = ::bbot::cli::unknown_mode::stop);

    bool
    parse (int& argc,
           char** argv,
           int& end,
           bool erase = false,
           ::bbot::cli::unknown_mode option = ::bbot::cli::unknown_mode::fail,
           ::bbot::cli::unknown_mode argument = ::bbot::cli::unknown_mode::stop);

    bool
    parse (int start,
           int& argc,
           char** argv,
           int& end,
           bool erase = false,
           ::bbot::cli::unknown_mode option = ::bbot::cli::unknown_mode::fail,
           ::bbot::cli::unknown_mode argument = ::bbot::cli::unknown_mode::stop);

    bool
    parse (::bbot::cli::scanner&,
           ::bbot::cli::unknown_mode option = ::bbot::cli::unknown_mode::fail,
           ::bbot::cli::unknown_mode argument = ::bbot::cli::unknown_mode::stop);

    // Option accessors.
    //
    const bool&
    help () const;

    const bool&
    version () const;

    const uint16_t&
    verbose () const;

    bool
    verbose_specified () const;

    const bool&
    systemd_daemon () const;

    const string&
    toolchain_name () const;

    bool
    toolchain_name_specified () const;

    const uint16_t&
    toolchain_num () const;

    bool
    toolchain_num_specified () const;

    const string&
    toolchain_lock () const;

    bool
    toolchain_lock_specified () const;

    const standard_version&
    toolchain_ver () const;

    bool
    toolchain_ver_specified () const;

    const string&
    toolchain_id () const;

    bool
    toolchain_id_specified () const;

    const interactive_mode&
    interactive () const;

    bool
    interactive_specified () const;

    const uint16_t&
    instance () const;

    bool
    instance_specified () const;

    const uint16_t&
    instance_max () const;

    bool
    instance_max_specified () const;

    const size_t&
    cpu () const;

    bool
    cpu_specified () const;

    const size_t&
    build_ram () const;

    bool
    build_ram_specified () const;

    const size_t&
    auxiliary_ram () const;

    bool
    auxiliary_ram_specified () const;

    const string&
    bridge () const;

    bool
    bridge_specified () const;

    const path&
    auth_key () const;

    bool
    auth_key_specified () const;

    const strings&
    trust () const;

    bool
    trust_specified () const;

    const dir_path&
    machines () const;

    bool
    machines_specified () const;

    const dir_path&
    tftp () const;

    bool
    tftp_specified () const;

    const uint16_t&
    tftp_port () const;

    bool
    tftp_port_specified () const;

    const size_t&
    bootstrap_startup () const;

    bool
    bootstrap_startup_specified () const;

    const size_t&
    bootstrap_timeout () const;

    bool
    bootstrap_timeout_specified () const;

    const size_t&
    bootstrap_auxiliary () const;

    bool
    bootstrap_auxiliary_specified () const;

    const size_t&
    bootstrap_retries () const;

    bool
    bootstrap_retries_specified () const;

    const size_t&
    build_startup () const;

    bool
    build_startup_specified () const;

    const size_t&
    build_timeout () const;

    bool
    build_timeout_specified () const;

    const size_t&
    build_retries () const;

    bool
    build_retries_specified () const;

    const size_t&
    intactive_timeout () const;

    bool
    intactive_timeout_specified () const;

    const size_t&
    connect_timeout () const;

    bool
    connect_timeout_specified () const;

    const size_t&
    request_timeout () const;

    bool
    request_timeout_specified () const;

    const size_t&
    request_retries () const;

    bool
    request_retries_specified () const;

    const path&
    openssl () const;

    bool
    openssl_specified () const;

    const strings&
    openssl_option () const;

    bool
    openssl_option_specified () const;

    const bool&
    dump_machines () const;

    const bool&
    dump_task () const;

    const bool&
    dump_result () const;

    const bool&
    fake_bootstrap () const;

    const bool&
    fake_build () const;

    const path&
    fake_machine () const;

    bool
    fake_machine_specified () const;

    const path&
    fake_request () const;

    bool
    fake_request_specified () const;

    // Print usage information.
    //
    static ::bbot::cli::usage_para
    print_usage (::std::ostream&,
                 ::bbot::cli::usage_para = ::bbot::cli::usage_para::none);

    // Implementation details.
    //
    protected:
    bool
    _parse (const char*, ::bbot::cli::scanner&);

    private:
    bool
    _parse (::bbot::cli::scanner&,
            ::bbot::cli::unknown_mode option,
            ::bbot::cli::unknown_mode argument);

    public:
    bool help_;
    bool version_;
    uint16_t verbose_;
    bool verbose_specified_;
    bool systemd_daemon_;
    string toolchain_name_;
    bool toolchain_name_specified_;
    uint16_t toolchain_num_;
    bool toolchain_num_specified_;
    string toolchain_lock_;
    bool toolchain_lock_specified_;
    standard_version toolchain_ver_;
    bool toolchain_ver_specified_;
    string toolchain_id_;
    bool toolchain_id_specified_;
    interactive_mode interactive_;
    bool interactive_specified_;
    uint16_t instance_;
    bool instance_specified_;
    uint16_t instance_max_;
    bool instance_max_specified_;
    size_t cpu_;
    bool cpu_specified_;
    size_t build_ram_;
    bool build_ram_specified_;
    size_t auxiliary_ram_;
    bool auxiliary_ram_specified_;
    string bridge_;
    bool bridge_specified_;
    path auth_key_;
    bool auth_key_specified_;
    strings trust_;
    bool trust_specified_;
    dir_path machines_;
    bool machines_specified_;
    dir_path tftp_;
    bool tftp_specified_;
    uint16_t tftp_port_;
    bool tftp_port_specified_;
    size_t bootstrap_startup_;
    bool bootstrap_startup_specified_;
    size_t bootstrap_timeout_;
    bool bootstrap_timeout_specified_;
    size_t bootstrap_auxiliary_;
    bool bootstrap_auxiliary_specified_;
    size_t bootstrap_retries_;
    bool bootstrap_retries_specified_;
    size_t build_startup_;
    bool build_startup_specified_;
    size_t build_timeout_;
    bool build_timeout_specified_;
    size_t build_retries_;
    bool build_retries_specified_;
    size_t intactive_timeout_;
    bool intactive_timeout_specified_;
    size_t connect_timeout_;
    bool connect_timeout_specified_;
    size_t request_timeout_;
    bool request_timeout_specified_;
    size_t request_retries_;
    bool request_retries_specified_;
    path openssl_;
    bool openssl_specified_;
    strings openssl_option_;
    bool openssl_option_specified_;
    bool dump_machines_;
    bool dump_task_;
    bool dump_result_;
    bool fake_bootstrap_;
    bool fake_build_;
    path fake_machine_;
    bool fake_machine_specified_;
    path fake_request_;
    bool fake_request_specified_;
  };
}

// Print page usage information.
//
namespace bbot
{
  ::bbot::cli::usage_para
  print_bbot_agent_usage (::std::ostream&,
                          ::bbot::cli::usage_para = ::bbot::cli::usage_para::none);
}

#include <bbot/agent/agent-options.ixx>

// Begin epilogue.
//
//
// End epilogue.

#endif // BBOT_AGENT_AGENT_OPTIONS_HXX
