//=====================================================================================================================
// Includes
//=====================================================================================================================
#ifndef _CINDEXSERVICE_H_
#define _CINDEXSERVICE_H_

#include <map>
using std::map;

//=====================================================================================================================
// Types
//=====================================================================================================================
typedef map<string, string> CKeyValueMap;

//=====================================================================================================================
// CMantis
//=====================================================================================================================
class CMantis
{
public:
  //-------------------------------------------------------------------------------------------------------------------
  // Constructor
  //-------------------------------------------------------------------------------------------------------------------
  CMantis(bool noxml);

  //-------------------------------------------------------------------------------------------------------------------
  // Public methods
  //-------------------------------------------------------------------------------------------------------------------
  void ProcessCommand(const string& cmd, const string& remainder);
  static string CreateErrorResponse(const string& errorText);
  static string CreateSuccessResponse(const string& contents);

protected:
  //-------------------------------------------------------------------------------------------------------------------
  // Implementation
  //-------------------------------------------------------------------------------------------------------------------
  string Match(const string& remainder);
  CKeyValueMap GetMatchDefaults();
  void ValidateMatchParms(const CKeyValueMap& pairs);

  string CreateSignature(const string& remainder);
  CKeyValueMap GetCreateSignatureDefaults();
  void ValidateCreateSignatureParms(const CKeyValueMap& pairs);

  string LoadInventory(const string& remainder);
  CKeyValueMap GetLoadInventoryDefaults();
  void ValidateLoadInventoryParms(const CKeyValueMap& pairs);

  void ApplyKeyValuePairs(const string& remainder, CKeyValueMap& parms);
  void DumpKeyValuePairs(const CKeyValueMap& pairs);
  void CheckRequired(const CKeyValueMap& pairs, const string& key);
  //-------------------------------------------------------------------------------------------------------------------
  // Data members
  //-------------------------------------------------------------------------------------------------------------------
  static bool noXML;
};

#endif
