/*
 * This file is part of the Owl Positioning System (OwlPS) project.
 * It is subject to the copyright notice and license terms in the
 * COPYRIGHT.t2t file found in the top-level directory of this
 * distribution and at
 *   https://code.lm7.fr/mcy/owlps/src/master/COPYRIGHT.t2t
 * No part of the OwlPS Project, including this file, may be copied,
 * modified, propagated, or distributed except according to the terms
 * contained in the COPYRIGHT.t2t file; the COPYRIGHT.t2t file must be
 * distributed along with this file, either separately or by replacing
 * this notice by the COPYRIGHT.t2t file's contents.
 */


#ifndef _OWLPS_POSITIONING_USERINTERFACE_HH_
#define _OWLPS_POSITIONING_USERINTERFACE_HH_

#include <string>
#include <boost/program_options/options_description.hpp>

/// Handles configuration inputs from user
class UserInterface
{
protected:
  const int cli_argument_count ;
  const char *const *const cli_argument_values ;
  boost::program_options::options_description *cli_options ;
  boost::program_options::options_description *file_options ;

  /** @name Operations */
  //@{
  /// Fills in all the options
  void fill_options(void) ;

  /// Fills in the options accepted on the command line
  void fill_cli_options(void) ;

  /// Fills in the options accepted on the command line and in the
  /// configuration file
  void fill_file_options(void) ;
  void fill_data_input_options(void) ;
  void fill_input_options(void) ;
  void fill_log_options(void) ;
  void fill_positioning_options(void) ;
  void fill_output_options(void) ;
  void fill_misc_options(void) ;

  /// Parses all the configuration inputs and updates Configuration
  void parse_options(void) ;
  void parse_command_line(void) const ;
  void parse_file(void) const ;

  /// Prints usage and/or version information if requested by the user
  void print_information(void) const ;
  //@}

public:
  UserInterface(const int argc, const char *const *const argv) ;

  ~UserInterface(void) ;
} ;

#endif // _OWLPS_POSITIONING_USERINTERFACE_HH_
