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

#ifndef BPKG_REP_INFO_OPTIONS_HXX
#define BPKG_REP_INFO_OPTIONS_HXX

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

#include <libbpkg/manifest.hxx>

#include <bpkg/common-options.hxx>

namespace bpkg
{
  class rep_info_options: public ::bpkg::common_options
  {
    public:
    rep_info_options ();

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

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

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

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

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

    // Merge options from the specified instance appending/overriding
    // them as if they appeared after options in this instance.
    //
    void
    merge (const rep_info_options&);

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

    const bool&
    cert_fingerprint () const;

    const bool&
    cert_name () const;

    const bool&
    cert_organization () const;

    const bool&
    cert_email () const;

    const bool&
    repositories () const;

    const bool&
    packages () const;

    const bool&
    manifest () const;

    const bool&
    ignore_unknown () const;

    const bool&
    deep () const;

    const path&
    repositories_file () const;

    bool
    repositories_file_specified () const;

    const path&
    packages_file () const;

    bool
    packages_file_specified () const;

    const repository_type&
    type () const;

    bool
    type_specified () const;

    const string&
    directory () const;

    bool
    directory_specified () const;

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

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

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

    public:
    bool name_;
    bool cert_fingerprint_;
    bool cert_name_;
    bool cert_organization_;
    bool cert_email_;
    bool repositories_;
    bool packages_;
    bool manifest_;
    bool ignore_unknown_;
    bool deep_;
    path repositories_file_;
    bool repositories_file_specified_;
    path packages_file_;
    bool packages_file_specified_;
    repository_type type_;
    bool type_specified_;
    string directory_;
    bool directory_specified_;
  };
}

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

#include <bpkg/rep-info-options.ixx>

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

#endif // BPKG_REP_INFO_OPTIONS_HXX
