//===-- MICmnResources.h ----------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#pragma once

// Third party headers
#include <map>

// In-house headers:
#include "MICmnBase.h"
#include "MIUtilSingletonBase.h"
#include "MIUtilString.h"

//++
//============================================================================
// Details: MI string test data resource definitions. These IDs match up with
//          actual string data in a map internal to CMICmnResources.
//          *** Be sure to update ms_pResourceId2TextData[] array ****
enum {
  IDS_PROJNAME = 1,
  IDS_MI_VERSION_DESCRIPTION_DEBUG,
  IDS_MI_VERSION_DESCRIPTION,
  IDS_MI_APPNAME_SHORT,
  IDS_MI_APPNAME_LONG,
  IDS_MI_APP_FILEPATHNAME,
  IDS_MI_APP_ARGS,
  IDE_MI_VERSION_GDB,

  IDS_UTIL_FILE_ERR_INVALID_PATHNAME,
  IDS_UTIL_FILE_ERR_OPENING_FILE,
  IDS_UTIL_FILE_ERR_OPENING_FILE_UNKNOWN,
  IDE_UTIL_FILE_ERR_WRITING_FILE,
  IDE_UTIL_FILE_ERR_WRITING_NOTOPEN,

  IDS_RESOURCES_ERR_STRING_NOT_FOUND,
  IDS_RESOURCES_ERR_STRING_TABLE_INVALID,

  IDS_MI_CLIENT_MSG,

  IDS_LOG_MSG_CREATION_DATE,
  IDS_LOG_MSG_FILE_LOGGER_PATH,
  IDS_LOG_MSG_VERSION,
  IDS_LOG_ERR_FILE_LOGGER_DISABLED,
  IDS_LOG_MEDIUM_ERR_INIT,
  IDS_LOG_MEDIUM_ERR_WRITE_ANY,
  IDS_LOG_MEDIUM_ERR_WRITE_MEDIUMFAIL,

  IDS_MEDIUMFILE_NAME,
  IDS_MEDIUMFILE_ERR_INVALID_PATH,
  IDS_MEDIUMFILE_ERR_FILE_HEADER,
  IDS_MEDIUMFILE_NAME_LOG,

  IDE_OS_ERR_UNKNOWN,
  IDE_OS_ERR_RETRIEVING,

  IDS_DRIVERMGR_DRIVER_ERR_INIT,

  IDE_MEDIUMSTDERR_NAME,
  IDE_MEDIUMSTDOUT_NAME,

  IDE_MI_APP_DESCRIPTION,
  IDE_MI_APP_INFORMATION,
  IDE_MI_APP_ARG_USAGE,
  IDE_MI_APP_ARG_HELP,
  IDE_MI_APP_ARG_VERSION,
  IDE_MI_APP_ARG_VERSION_LONG,
  IDE_MI_APP_ARG_INTERPRETER,
  IDE_MI_APP_ARG_EXECUTEABLE,
  IDE_MI_APP_ARG_SOURCE,
  IDE_MI_APP_ARG_APP_LOG,
  IDE_MI_APP_ARG_APP_LOG_DIR,
  IDE_MI_APP_ARG_EXAMPLE,
  IDE_MI_APP_ARG_EXECUTABLE,
  IDE_MI_APP_ARG_SYNCHRONOUS,

  IDS_STDIN_ERR_INVALID_PROMPT,
  IDS_STDIN_ERR_THREAD_CREATION_FAILED,
  IDS_STDIN_ERR_THREAD_DELETE,
  IDS_STDIN_ERR_CHKING_BYTE_AVAILABLE,
  IDS_STDIN_INPUT_CTRL_CHARS,

  IDS_CMD_QUIT_HELP,

  IDS_THREADMGR_ERR_THREAD_ID_INVALID,
  IDS_THREADMGR_ERR_THREAD_FAIL_CREATE,
  IDS_THREADMGR_ERR_THREAD_ID_NOT_FOUND,
  IDS_THREADMGR_ERR_THREAD_STILL_ALIVE,

  IDS_FALLTHRU_DRIVER_CMD_RECEIVED,

  IDS_CMDFACTORY_ERR_INVALID_CMD_NAME,
  IDS_CMDFACTORY_ERR_INVALID_CMD_CR8FN,
  IDS_CMDFACTORY_ERR_CMD_NOT_REGISTERED,
  IDS_CMDFACTORY_ERR_CMD_ALREADY_REGED,

  IDS_CMDMGR_ERR_CMD_FAILED_CREATE,
  IDS_CMDMGR_ERR_CMD_INVOKER,

  IDS_MI_INIT_ERR_LOG,
  IDS_MI_INIT_ERR_RESOURCES,
  IDS_MI_INIT_ERR_INIT,
  IDS_MI_INIT_ERR_STREAMSTDIN,
  IDS_MI_INIT_ERR_STREAMSTDIN_OSHANDLER,
  IDS_MI_INIT_ERR_OS_STDIN_HANDLER,
  IDS_MI_INIT_ERR_STREAMSTDOUT,
  IDS_MI_INIT_ERR_STREAMSTDERR,
  IDS_MI_INIT_ERR_FALLTHRUDRIVER,
  IDS_MI_INIT_ERR_THREADMGR,
  IDS_MI_INIT_ERR_CMDINTERPRETER,
  IDS_MI_INIT_ERR_CMDMGR,
  IDS_MI_INIT_ERR_CMDFACTORY,
  IDS_MI_INIT_ERR_CMDINVOKER,
  IDS_MI_INIT_ERR_CMDMONITOR,
  IDS_MI_INIT_ERR_LLDBDEBUGGER,
  IDS_MI_INIT_ERR_DRIVERMGR,
  IDS_MI_INIT_ERR_DRIVER,
  IDS_MI_INIT_ERR_OUTOFBANDHANDLER,
  IDS_MI_INIT_ERR_DEBUGSESSIONINFO,
  IDS_MI_INIT_ERR_THREADMANAGER,
  IDS_MI_INIT_ERR_CLIENT_USING_DRIVER,
  IDS_MI_INIT_ERR_LOCAL_DEBUG_SESSION,

  IDS_CODE_ERR_INVALID_PARAMETER_VALUE,
  IDS_CODE_ERR_INVALID_PARAM_NULL_POINTER,
  IDS_CODE_ERR_INVALID_ENUMERATION_VALUE,

  IDS_LLDBDEBUGGER_ERR_INVALIDLISTENER,
  IDS_LLDBDEBUGGER_ERR_INVALIDDEBUGGER,
  IDS_LLDBDEBUGGER_ERR_CLIENTDRIVER,
  IDS_LLDBDEBUGGER_ERR_STARTLISTENER,
  IDS_LLDBDEBUGGER_ERR_THREADCREATIONFAIL,
  IDS_LLDBDEBUGGER_ERR_THREAD_DELETE,
  IDS_LLDBDEBUGGER_ERR_INVALIDBROADCASTER,
  IDS_LLDBDEBUGGER_ERR_INVALIDCLIENTNAME,
  IDS_LLDBDEBUGGER_ERR_CLIENTNOTREGISTERED,
  IDS_LLDBDEBUGGER_ERR_STOPLISTENER,
  IDS_LLDBDEBUGGER_ERR_BROADCASTER_NAME,
  IDS_LLDBDEBUGGER_WRN_UNKNOWN_EVENT,

  IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT,
  IDS_LLDBOUTOFBAND_ERR_PROCESS_INVALID,
  IDS_LLDBOUTOFBAND_ERR_BRKPT_NOTFOUND,
  IDS_LLDBOUTOFBAND_ERR_BRKPT_INFO_GET,
  IDS_LLDBOUTOFBAND_ERR_BRKPT_INFO_SET,
  IDS_LLDBOUTOFBAND_ERR_FORM_MI_RESPONSE,
  IDS_LLDBOUTOFBAND_ERR_FRAME_INFO_GET,
  IDS_LLDBOUTOFBAND_ERR_SETNEWDRIVERSTATE,
  IDS_LLDBOUTOFBAND_ERR_BRKPT_CNT_EXCEEDED,

  IDS_DBGSESSION_ERR_SHARED_DATA_ADD,

  IDS_MI_SHTDWN_ERR_LOG,
  IDS_MI_SHUTDOWN_ERR,
  IDE_MI_SHTDWN_ERR_RESOURCES,
  IDE_MI_SHTDWN_ERR_STREAMSTDIN,
  IDS_MI_SHTDWN_ERR_OS_STDIN_HANDLER,
  IDS_MI_SHTDWN_ERR_STREAMSTDOUT,
  IDS_MI_SHTDWN_ERR_STREAMSTDERR,
  IDS_MI_SHTDWN_ERR_THREADMGR,
  IDS_MI_SHTDWN_ERR_CMDINTERPRETER,
  IDS_MI_SHTDWN_ERR_CMDMGR,
  IDS_MI_SHTDWN_ERR_CMDFACTORY,
  IDS_MI_SHTDWN_ERR_CMDINVOKER,
  IDS_MI_SHTDWN_ERR_CMDMONITOR,
  IDS_MI_SHTDWN_ERR_LLDBDEBUGGER,
  IDS_MI_SHTDWN_ERR_DRIVERMGR,
  IDS_MI_SHTDWN_ERR_DRIVER,
  IDS_MI_SHTDWN_ERR_OUTOFBANDHANDLER,
  IDS_MI_SHTDWN_ERR_DEBUGSESSIONINFO,
  IDE_MI_SHTDWN_ERR_THREADMANAGER,

  IDS_DRIVER_ERR_PARSE_ARGS,
  IDS_DRIVER_ERR_PARSE_ARGS_UNKNOWN,
  IDS_DRIVER_ERR_CURRENT_NOT_SET,
  IDS_DRIVER_ERR_NON_REGISTERED,
  IDS_DRIVER_SAY_DRIVER_USING,
  IDS_DRIVER_ERR_ID_INVALID,
  IDS_DRIVER_ERR_FALLTHRU_DRIVER_ERR,
  IDS_DRIVER_CMD_RECEIVED,
  IDS_DRIVER_CMD_NOT_IN_FACTORY,
  IDS_DRIVER_ERR_DRIVER_STATE_ERROR,
  IDS_DRIVER_ERR_MAINLOOP,
  IDS_DRIVER_ERR_LOCAL_DEBUG_NOT_IMPL,
  IDS_DRIVER_ERR_LOCAL_DEBUG_INIT,

  IDS_DRIVER_WAITING_STDIN_DATA,

  IDS_STDERR_ERR_NOT_ALL_DATA_WRITTEN,

  IDS_CMD_ARGS_ERR_OPTION_NOT_FOUND,
  IDS_CMD_ARGS_ERR_VALIDATION_MANDATORY,
  IDS_CMD_ARGS_ERR_VALIDATION_INVALID,
  IDS_CMD_ARGS_ERR_VALIDATION_MAN_INVALID,
  IDS_CMD_ARGS_ERR_VALIDATION_MISSING_INF,
  IDS_CMD_ARGS_ERR_CONTEXT_NOT_ALL_EATTEN,
  IDS_CMD_ARGS_ERR_PREFIX_MSG,

  IDS_VARIANT_ERR_USED_BASECLASS,
  IDS_VARIANT_ERR_MAP_KEY_INVALID,

  IDS_WORD_INVALIDBRKTS,
  IDS_WORD_NONE,
  IDS_WORD_NOT,
  IDS_WORD_INVALIDEMPTY,
  IDS_WORD_INVALIDNULLPTR,
  IDS_WORD_UNKNOWNBRKTS,
  IDS_WORD_NOT_IMPLEMENTED,
  IDS_WORD_NOT_IMPLEMENTED_BRKTS,
  IDS_WORD_UNKNOWNTYPE_BRKTS,
  IDS_WORD_ERR_MSG_NOT_IMPLEMENTED_BRKTS,

  IDS_CMD_ERR_N_OPTIONS_REQUIRED,
  IDS_CMD_ERR_OPTION_NOT_FOUND,
  IDS_CMD_ERR_ARGS,
  IDS_CMD_WRN_ARGS_NOT_HANDLED,
  IDS_CMD_ERR_FNFAILED,
  IDS_CMD_ERR_SHARED_DATA_NOT_FOUND,
  IDS_CMD_ERR_LLDBPROCESS_DETACH,
  IDS_CMD_ERR_LLDBPROCESS_DESTROY,
  IDS_CMD_ERR_SETWKDIR,
  IDS_CMD_ERR_INVALID_TARGET,
  IDS_CMD_ERR_INVALID_TARGET_CURRENT,
  IDS_CMD_ERR_INVALID_TARGET_TYPE,
  IDS_CMD_ERR_INVALID_TARGET_PLUGIN,
  IDS_CMD_ERR_CONNECT_TO_TARGET,
  IDS_CMD_ERR_INVALID_TARGETPLUGINCURRENT,
  IDS_CMD_ERR_NOT_IMPLEMENTED,
  IDS_CMD_ERR_NOT_IMPLEMENTED_DEPRECATED,
  IDS_CMD_ERR_CREATE_TARGET,
  IDS_CMD_ERR_BRKPT_LOCATION_FORMAT,
  IDS_CMD_ERR_BRKPT_LOCATION_NOT_FOUND,
  IDS_CMD_ERR_BRKPT_INVALID,
  IDS_CMD_ERR_BRKPT_CNT_EXCEEDED,
  IDS_CMD_ERR_SOME_ERROR,
  IDS_CMD_ERR_THREAD_INVALID,
  IDS_CMD_ERR_THREAD_FRAME_RANGE_INVALID,
  IDS_CMD_ERR_FRAME_INVALID,
  IDS_CMD_ERR_VARIABLE_DOESNOTEXIST,
  IDS_CMD_ERR_VARIABLE_ENUM_INVALID,
  IDS_CMD_ERR_VARIABLE_EXPRESSIONPATH,
  IDS_CMD_ERR_VARIABLE_CREATION_FAILED,
  IDS_CMD_ERR_VARIABLE_CHILD_RANGE_INVALID,
  IDS_CMD_ERR_CMD_RUN_BUT_NO_ACTION,
  IDS_CMD_ERR_EVENT_HANDLED_BUT_NO_ACTION,
  IDS_CMD_ERR_DISASM_ADDR_START_INVALID,
  IDS_CMD_ERR_DISASM_ADDR_END_INVALID,
  IDS_CMD_ERR_MEMORY_ALLOC_FAILURE,
  IDS_CMD_ERR_LLDB_ERR_NOT_READ_WHOLE_BLK,
  IDS_CMD_ERR_LLDB_ERR_READ_MEM_BYTES,
  IDS_CMD_ERR_INVALID_PROCESS,
  IDS_CMD_ERR_INVALID_PRINT_VALUES,
  IDS_CMD_ERR_INVALID_LOCATION_FORMAT,
  IDS_CMD_ERR_INVALID_FORMAT_TYPE,
  IDS_CMD_ERR_BRKPT_INFO_OBJ_NOT_FOUND,
  IDS_CMD_ERR_LLDB_ERR_WRITE_MEM_BYTES,
  IDS_CMD_ERR_LLDB_ERR_NOT_WRITE_WHOLEBLK,
  IDS_CMD_ERR_SET_NEW_DRIVER_STATE,
  IDS_CMD_ERR_INFO_PRINTFN_NOT_FOUND,
  IDS_CMD_ERR_INFO_PRINTFN_FAILED,
  IDS_CMD_ERR_GDBSET_OPT_TARGETASYNC,
  IDS_CMD_ERR_GDBSET_OPT_BREAKPOINT,
  IDS_CMD_ERR_GDBSET_OPT_SOLIBSEARCHPATH,
  IDS_CMD_ERR_GDBSET_OPT_PRINT_BAD_ARGS,
  IDS_CMD_ERR_GDBSET_OPT_PRINT_UNKNOWN_OPTION,
  IDS_CMD_ERR_GDBSHOW_OPT_PRINT_BAD_ARGS,
  IDS_CMD_ERR_GDBSHOW_OPT_PRINT_UNKNOWN_OPTION,
  IDS_CMD_ERR_GDBSHOW_OPT_BREAKPOINT_BAD_ARGS,
  IDS_CMD_ERR_GDBSHOW_OPT_BREAKPOINT_UNKNOWN_OPTION,
  IDS_CMD_ERR_EXPR_INVALID,
  IDS_CMD_ERR_ATTACH_FAILED,
  IDS_CMD_ERR_ATTACH_BAD_ARGS
};

//++
//============================================================================
// Details: MI common code implementation class. Handle application resources
//          and locality.
//          Singleton class.
//--
class CMICmnResources : public CMICmnBase,
                        public MI::ISingleton<CMICmnResources> {
  friend class MI::ISingleton<CMICmnResources>;

  // Methods:
public:
  bool Initialize() override;
  bool Shutdown() override;

  CMIUtilString GetString(const MIuint vResourceId) const;
  bool HasString(const MIuint vResourceId) const;

  // Typedef:
private:
  typedef std::map<MIuint, const char *> MapRscrIdToTextData_t;
  typedef std::pair<MIuint, const char *> MapPairRscrIdToTextData_t;

  // Enumerations:
private:
  enum Buffer_e { eBufferSize = 2048 };

  // Structs:
private:
  struct SRsrcTextData {
    MIuint id;
    const char *pTextData;
  };

  // Methods:
private:
  /* ctor */ CMICmnResources();
  /* ctor */ CMICmnResources(const CMICmnResources &);
  void operator=(const CMICmnResources &);

  bool GetStringFromResource(const MIuint vResourceId,
                             CMIUtilString &vrwResourceString) const;
  bool ReadResourceStringData();

  // Overridden:
private:
  // From CMICmnBase
  /* dtor */ ~CMICmnResources() override;

  // Attributes:
private:
  static const SRsrcTextData ms_pResourceId2TextData[];
  //
  MIuint m_nResourceId2TextDataSize;
  MapRscrIdToTextData_t m_mapRscrIdToTextData;
};

//++ =========================================================================
// Details: Macro short cut for retrieving a text data resource
//--
#define MIRSRC(x) CMICmnResources::Instance().GetString(x).c_str()
