/*
 Copyright 2019 Alain Dargelas

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
 */

/*
 * File:   ErrorDefinition.cpp
 * Author: alain
 *
 * Created on March 5, 2017, 11:25 PM
 */
#include "../Utils/StringUtils.h"
#include "ErrorDefinition.h"

using namespace SURELOG;

std::map<ErrorDefinition::ErrorType, ErrorDefinition::ErrorInfo>
    ErrorDefinition::m_errorInfoMap;

void ErrorDefinition::rec(ErrorType type, ErrorSeverity severity,
                          ErrorCategory category, std::string text,
                          std::string extraText) {
  ErrorInfo info(severity, category, text, extraText);
  m_errorInfoMap.insert(std::make_pair(type, info));
}

void ErrorDefinition::setSeverity(ErrorDefinition::ErrorType type,
                                  ErrorDefinition::ErrorSeverity severity) {
  std::map<ErrorDefinition::ErrorType, ErrorDefinition::ErrorInfo>::iterator
      itr = m_errorInfoMap.find(type);
  if (itr != m_errorInfoMap.end()) {
    ErrorDefinition::ErrorInfo& info = (*itr).second;
    info.m_severity = severity;
  }
}

ErrorDefinition::ErrorType ErrorDefinition::getErrorType(std::string errorId) {
  errorId = StringUtils::rtrim(errorId, ']');
  errorId = StringUtils::ltrim(errorId, '[');
  errorId = errorId.erase(0, 8);
  unsigned int id = atoi(errorId.c_str());
  return (ErrorDefinition::ErrorType)id;
}

ErrorDefinition::ErrorSeverity ErrorDefinition::getErrorSeverity(
    std::string errorSeverity) {
  if (errorSeverity == "FATAL")
    return FATAL;
  else if (errorSeverity == "ERROR")
    return ERROR;
  else if (errorSeverity == "WARNI" || errorSeverity == "WARNING")
    return WARNING;
  else if (errorSeverity == "INFO" || errorSeverity == "INFO ")
    return INFO;
  else if (errorSeverity == "NOTE" || errorSeverity == "NOTE ")
    return NOTE;
  else
    return FATAL;
}

std::string ErrorDefinition::getCategoryName(
    ErrorDefinition::ErrorCategory category) {
  std::string cat;
  switch (category) {
    case ErrorDefinition::CMD:
      cat = "CM";
      break;
    case ErrorDefinition::PP:
      cat = "PP";
      break;
    case ErrorDefinition::PARSE:
      cat = "PA";
      break;
    case ErrorDefinition::PYTH:
      cat = "PY";
      break;
    case ErrorDefinition::LANG:
      cat = "LA";
      break;
    case ErrorDefinition::SEMA:
      cat = "SM";
      break;
    case ErrorDefinition::COMP:
      cat = "CP";
      break;
    case ErrorDefinition::ELAB:
      cat = "EL";
      break;
    case ErrorDefinition::LIB:
      cat = "LIB";
      break;
    case ErrorDefinition::LINT:
      cat = "LN";
      break;
    case ErrorDefinition::USER:
      cat = "US";
      break;
  }
  return cat;
}

ErrorDefinition::ErrorCategory ErrorDefinition::getCategory(std::string cat) {
  if (cat == "CM")
    return ErrorDefinition::CMD;
  else if (cat == "PP")
    return ErrorDefinition::PP;
  else if (cat == "PA")
    return ErrorDefinition::PARSE;
  else if (cat == "PY")
    return ErrorDefinition::PYTH;
  else if (cat == "LA")
    return ErrorDefinition::LANG;
  else if (cat == "SM")
    return ErrorDefinition::SEMA;
  else if (cat == "CP")
    return ErrorDefinition::COMP;
  else if (cat == "EL")
    return ErrorDefinition::ELAB;
  else if (cat == "LIB")
    return ErrorDefinition::LIB;
  else if (cat == "LN")
    return ErrorDefinition::LINT;
  else if (cat == "US")
    return ErrorDefinition::USER;
  return ErrorDefinition::USER;
}

bool ErrorDefinition::init() {
  rec(CMD_FILE_DOES_NOT_EXIST, FATAL, CMD, "File \"%s\" does not exist");
  rec(CMD_CANNOT_OPEN_FILE_FOR_READ, FATAL, CMD,
      "Cannot open file \"%s\" for read operation");
  rec(CMD_CANNOT_OPEN_FILE_FOR_WRITE, FATAL, CMD,
      "Cannot open file \"%s\" for write operation");
  rec(CMD_DASH_F_FILE_DOES_NOT_EXIST, FATAL, CMD,
      "Command file (-f) \"%s\" does not exist");
  rec(CMD_INCLUDE_PATH_DOES_NOT_EXIST, WARNING, CMD,
      "Include path \"%s\" does not exist");
  rec(CMD_LIBRARY_FILE_DOES_NOT_EXIST, FATAL, CMD,
      "Library file \"%s\" does not exist");
  rec(CMD_LIBRARY_PATH_DOES_NOT_EXIST, WARNING, CMD,
      "Library path \"%s\" does not exist");
  rec(CMD_VERILOG_FILE_DOES_NOT_EXIST, FATAL, CMD,
      "Verilog File \"%s\" does not exist");
  rec(CMD_PLUS_ARG_IGNORED, NOTE, CMD, "Command line argument \"%s\" ignored");
  rec(CMD_MINUS_ARG_IGNORED, WARNING, CMD,
      "Command line argument \"%s\" ignored");
  rec(CMD_DEBUG_MISSING_LEVEL, ERROR, CMD,
      "Option -d is missing the debug level <level>");
  rec(CMD_DEBUG_INCORRECT_LEVEL, WARNING, CMD,
      "Option -d received incorrect level: \"%s\", level should be 0-3");
  rec(CMD_LIBRARY_FILE_MISSING_FILE, ERROR, CMD,
      "Library File option \"%s\" is missing the file name");
  rec(CMD_LIBRARY_PATH_MISSING_PATH, ERROR, CMD,
      "Library Path option \"%s\" is missing the path name");
  rec(CMD_LOG_FILE_MISSING_FILE, ERROR, CMD,
      "Log file option \"%s\" is missing the path name");
  rec(CMD_PP_FILE_MISSING_FILE, ERROR, CMD,
      "Output file option \"%s\" is missing the path name");
  rec(CMD_MT_MISSING_LEVEL, ERROR, CMD,
      "Option -mt is missing the number of threads <max_threads>");
  rec(CMD_MT_INCORRECT_LEVEL, ERROR, CMD,
      "Option -mt received incorrect level: \"%s\", level should be 0-64");
  rec(CMD_SEPARATE_COMPILATION_UNIT_ON, INFO, CMD,
      "Separate compilation-unit mode is on");
  rec(CMD_PP_FILE_MISSING_ODIR, FATAL, CMD,
      "Missing output directory argument for -odir option");
  rec(CMD_PP_CANNOT_CREATE_OUTPUT_DIR, FATAL, CMD,
      "Cannot create output directory \"%s\"");
  rec(CMD_CREATING_LOG_FILE, INFO, CMD, "Creating log file %s");
  rec(CMD_NUMBER_THREADS, INFO, CMD, "Executing with %s threads");
  rec(CMD_PP_CANNOT_CREATE_CACHE_DIR, FATAL, CMD,
      "Cannot create cache directory \"%s\"");
  rec(CMD_TIMESCALE_MISSING_SETTING, FATAL, CMD, "Missing timescale setting");
  rec(CMD_SPLIT_FILE_MISSING_SIZE, FATAL, CMD, "Missing file splitting size");
  rec(CMD_UNDEFINED_CONFIG, ERROR, CMD, "Undefined configuration: \"%s\"");
  rec(CMD_USING_GLOBAL_TIMESCALE, INFO, CMD, "Using global timescale: \"%s\"");
  rec(PP_CANNOT_OPEN_FILE, ERROR, PP, "Cannot open file \"%s\"");
  rec(PP_CANNOT_OPEN_INCLUDE_FILE, ERROR, PP,
      "Cannot open include file \"%s\"");
  rec(PP_UNKOWN_MACRO, ERROR, PP, "Unknown macro \"%s\"");
  rec(PP_UNDEF_UNKOWN_MACRO, WARNING, PP, "Undefining an unknown macro \"%s\"");
  rec(PP_OPEN_FILE_FOR_WRITE, FATAL, PP,
      "Cannot open file \"%s\" for write operation");
  rec(PP_MULTIPLY_DEFINED_MACRO, NOTE, PP, "Multiply defined macro \"%s\"",
      "%exloc previous definition");
  rec(PP_SYNTAX_ERROR, ERROR, PP, "Syntax error: %s", "%exobj");
  rec(PP_TOO_MANY_ARGS_MACRO, ERROR, PP,
      "Too many arguments (%exobj) for macro \"%s\"",
      "%exloc macro definition takes %exobj");
  rec(PP_MACRO_SYNTAX_ERROR, ERROR, PP, "Syntax error in macro: %s",
      "%exloc macro instantiation");
  rec(PP_MACRO_NO_DEFAULT_VALUE, ERROR, PP,
      "Macro instantiation omits argument %exobj for \"%s\"",
      "%exloc No default value for argument %exobj in macro definition");
  rec(PP_MACRO_PARENTHESIS_NEEDED, ERROR, PP,
      "Macro instantiation omits parenthesis for \"%s\"",
      "%exloc macro definition has arguments");
  rec(PP_MACRO_NAME_RESERVED, ERROR, PP,
      "Illegally redefining compiler directive \"`%s\" as a macro name");
  rec(PP_MACRO_HAS_SPACE_BEFORE_ARGS, ERROR, PP,
      "Illegal space in between macro name \"%s\" and open parenthesis");
  rec(PP_MACRO_UNUSED_ARGUMENT, WARNING, PP, "Unused macro argument \"%s\"");
  rec(PP_MACRO_UNDEFINED_ARGUMENT, WARNING, PP,
      "Undefined macro argument \"%s\"");
  rec(PP_RECURSIVE_MACRO_DEFINITION, ERROR, PP,
      "Recursive macro definition for \"%s\"",
      "%exloc macro used in macro \"%exobj\"");
  rec(PP_UNTERMINATED_STRING, ERROR, PP, "Illegal unterminated string");
  rec(PP_UNESCAPED_CHARACTER_IN_STRING, ERROR, PP,
      "Illegal un-escaped character '%s' in string");
  rec(PP_UNRECOGNIZED_ESCAPED_SEQUENCE, ERROR, PP,
      "Unknown escaped sequence '%s'");
  rec(PP_INVALID_INCLUDE_FILENAME, ERROR, PP, "Invalid include filename");
  rec(PP_ILLEGAL_DIRECTIVE_IN_DESIGN_ELEMENT, ERROR, PP,
      "Illegal directive in design element \"%s\"", "%exloc macro instance");
  rec(PP_CANNOT_CREATE_DIRECTORY, FATAL, PP, "Cannot create directory \"%s\"");
  rec(PP_PROCESSING_SOURCE_FILE, INFO, PP, "Preprocessing source file \"%s\"");
  rec(PP_PROCESSING_INCLUDE_FILE, INFO, PP,
      "Preprocessing include file \"%s\"");
  rec(PP_ILLEGAL_DIRECTIVE_ELSEIF, ERROR, PP,
      "Illegal directive `elseif, correct directive is `elsif");
  rec(PP_CANNOT_READ_FILE_CONTENT, ERROR, PP,
      "Cannot read the file's content \"%s\". Only UTF-8 is supported");
  rec(PP_RECURSIVE_INCLUDE_DIRECTIVE, FATAL, PP,
      "Recursive include directive for file \"%s\"");
  rec(PA_CANNOT_SPLIT_FILE, WARNING, PARSE, "Cannot split large file \"%s\"");
  rec(PA_PROCESSING_SOURCE_FILE, INFO, PARSE, "Parsing source file \"%s\"");
  rec(PA_CANNOT_OPEN_FILE, FATAL, PARSE, "Cannot open file \"%s\"");
  rec(PA_UNKOWN_MACRO, ERROR, PARSE, "Unknown macro \"%s\"");
  rec(PA_MAX_LENGTH_IDENTIFIER, ERROR, PARSE,
      "Indentifier exceeds max length \"%s\"");
  rec(PA_NOTIMESCALE_INFO, WARNING, PARSE, "No timescale set for \"%s\"");
  rec(PA_MISSING_TIMEUNIT, ERROR, PARSE,
      "Missing timeunit/timeprecision for \"%s\"");
  rec(PA_SYNTAX_ERROR, ERROR, PARSE, "Syntax error: %s", "%exobj");
  rec(PA_RESERVED_KEYWORD, ERROR, PARSE, "Reserved keyword: %s");
  rec(PA_UNSUPPORTED_KEYWORD_LIST, ERROR, PARSE, "Unsupported keyword set: %s");
  rec(COMP_COMPILE, INFO, COMP, "Compilation..");
  rec(COMP_COMPILE_PACKAGE, INFO, COMP, "Compile package \"%s\"");
  rec(COMP_COMPILE_CLASS, INFO, COMP, "Compile class \"%s\"");
  rec(COMP_COMPILE_MODULE, INFO, COMP, "Compile module \"%s\"");
  rec(COMP_COMPILE_UDP, INFO, COMP, "Compile udp \"%s\"");
  rec(COMP_COMPILE_PROGRAM, INFO, COMP, "Compile program \"%s\"");
  rec(COMP_COMPILE_CHECKER, INFO, COMP, "Compile checker \"%s\"");
  rec(COMP_COMPILE_INTERFACE, INFO, COMP, "Compile interface \"%s\"");
  rec(COMP_UNDEFINED_INTERFACE, ERROR, COMP, "Undefined interface \"%s\"");
  rec(COMP_PORT_MISSING_TYPE, NOTE, COMP,
      "Implicit port type (wire) for \"%s\"",
      "there are %exobj more instances of this message");
  rec(COMP_PORT_MISSING_DIRECTION, WARNING, COMP,
      "Port \"%s\" definition missing its direction (input, output, inout)",
      "there are %exobj more instances of this message");
  rec(COMP_MODPORT_UNDEFINED_PORT, ERROR, COMP,
      "Undefined port used in modport: \"%s\"");
  rec(COMP_MODPORT_UNDEFINED_CLOCKING_BLOCK, ERROR, COMP,
      "Undefined clocking block used in modport: \"%s\"");
  rec(COMP_NO_MODPORT_IN_GENERATE, ERROR, COMP,
      "Illegal modport in generate statement");
  rec(COMP_PROGRAM_OBSOLETE_USAGE, WARNING, COMP,
      "Using programs is discouraged \"%s\", programs are obsoleted by UVM");
  rec(COMP_UNDEFINED_CLASS, ERROR, COMP, "Undefined class \"%s\"");
  rec(COMP_UNDEFINED_PACKAGE, ERROR, COMP, "Undefined package \"%s\"");
  rec(COMP_UNDEFINED_TYPE, ERROR, COMP, "Undefined type \"%s\"");
  rec(COMP_MULTIPLY_DEFINED_PROPERTY, ERROR, COMP,
      "Multiply defined property \"%s\"", "%exloc previous definition");
  rec(COMP_MULTIPLY_DEFINED_CLASS, WARNING, COMP,
      "Multiply defined class \"%s\"", "%exloc previous definition");
  rec(COMP_MULTIPLY_DEFINED_FUNCTION, ERROR, COMP,
      "Multiply defined function \"%s\"", "%exloc previous definition");
  rec(COMP_MULTIPLY_DEFINED_TASK, ERROR, COMP, "Multiply defined task \"%s\"",
      "%exloc previous definition");
  rec(COMP_MULTIPLY_DEFINED_CONSTRAINT, ERROR, COMP,
      "Multiply defined constraint \"%s\"", "%exloc previous definition");
  rec(COMP_MULTIPLY_DEFINED_TYPEDEF, ERROR, COMP,
      "Multiply defined typedef \"%s\"", "%exloc previous definition");
  rec(COMP_MULTIPLY_DEFINED_INNER_CLASS, ERROR, COMP,
      "Multiply defined inner class \"%s\"", "%exloc previous definition");
  rec(COMP_MULTIPLY_DEFINED_COVERGROUP, ERROR, COMP,
      "Multiply defined covergroup \"%s\"", "%exloc previous definition");
  rec(COMP_MULTIPLY_DEFINED_PARAMETER, ERROR, COMP,
      "Multiply defined parameter \"%s\"", "%exloc previous definition");
  rec(COMP_UNDEFINED_VARIABLE, ERROR, COMP, "Undefined variable \"%s\"");
  rec(COMP_UNDEFINED_BASE_CLASS, ERROR, COMP,
      "Undefined base class \"%s\" extended by \"%exobj\"");
  rec(COMP_MULTIPLY_DEFINED_PACKAGE, ERROR, COMP,
      "Multiply defined package: \"%s\"", "%exloc previous definition");
  rec(COMP_INCOMPATIBLE_TYPES, ERROR, COMP,
      "Incompatible types: \"%s\" is assigned \"%exobj\"");
  rec(COMP_MULTIPLY_DEFINED_VARIABLE, ERROR, COMP,
      "Multiply defined variable \"%s\"", "%exloc previous definition");
  rec(COMP_NO_METHOD_FOR_TYPE, ERROR, COMP,
      "Function \"%exobj\" is not defined for variable %s",
      "%exloc type definition");
  rec(COMP_UNDEFINED_SYSTEM_FUNCTION, ERROR, COMP,
      "Undefined system task/function \"$%s\"");
  rec(COMP_MULTIPLY_DEFINED_DESIGN_UNIT, ERROR, COMP,
      "Colliding compilation unit name: \"%s\"", "%exloc previous usage");
  rec(PY_PROCESSING_SOURCE_FILE, INFO, PYTH, "Processing source file \"%s\"");
  rec(PY_NO_PYTHON_LISTENER_FOUND, FATAL, PYTH,
      "No Python listener found (slSV3_1aPythonListener.py)");
  rec(ELAB_NO_MODULE_DEFINITION, WARNING, ELAB,
      "Cannot find a module definition for \"%s\"");
  rec(ELAB_NO_UDP_DEFINITION, WARNING, ELAB,
      "Cannot find a Udp definition for \"%s\"");
  rec(ELAB_NO_INTERFACE_DEFINITION, WARNING, ELAB,
      "Cannot find an interface definition for \"%s\"");
  rec(ELAB_TOP_LEVEL_MODULE, NOTE, ELAB, "Top level module \"%s\"");
  rec(ELAB_MULTIPLE_TOP_LEVEL_MODULES, NOTE, ELAB,
      "Multiple top level modules in design");
  rec(ELAB_MULTIPLY_DEFINED_MODULE, WARNING, ELAB,
      "Multiply defined module \"%s\"", "%exloc previous definition");
  rec(ELAB_NO_TOP_LEVEL_MODULE, ERROR, ELAB, "No top level module in design");
  rec(ELAB_INSTANTIATION_LOOP, ERROR, ELAB, "Instantiation loop for \"%s\"",
      "%exloc previous instantiation");
  rec(ELAB_NB_TOP_LEVEL_MODULES, NOTE, ELAB, "Nb Top level modules: %s");
  rec(ELAB_MAX_INSTANCE_DEPTH, NOTE, ELAB, "Max instance depth: %s");
  rec(ELAB_NB_INSTANCES, NOTE, ELAB, "Nb instances: %s");
  rec(ELAB_NB_LEAF_INSTANCES, NOTE, ELAB, "Nb leaf instances: %s");
  rec(ELAB_NB_UNDEF_MODULES, WARNING, ELAB, "Nb undefined modules: %s");
  rec(ELAB_NB_UNDEF_INSTANCES, WARNING, ELAB, "Nb undefined instances: %s");
  rec(ELAB_UNDEF_VARIABLE, ERROR, ELAB, "Undefined variable: %s");
  rec(ELAB_UNMATCHED_DEFPARAM, WARNING, ELAB,
      "Defparam does not match any design object: \"%s\"");
  rec(ELAB_DEFPARAM_OUTSIDE_SCOPE, ERROR, ELAB,
      "Defparam sets an object outside its generate scope: \"%s\"");
  rec(ELAB_MULTI_DEFPARAM_ON_OBJECT, WARNING, ELAB,
      "Multiple defparam on object: \"%s\"", "%exloc previous setting");
  rec(ELAB_UNDEFINED_CONFIG, ERROR, ELAB, "Undefined configuration: \"%s\"");
  rec(ELAB_CONFIGURATION_USED, NOTE, ELAB, "Using configuration \"%s\"");
  rec(ELAB_CONFIGURATION_IGNORED, NOTE, ELAB, "Ignoring configuration \"%s\"");
  rec(ELAB_USE_CLAUSE_IGNORED, WARNING, ELAB,
      "Use clause has no effect, no matching design object found \"%s\"");
  rec(ELAB_SCOPE_PATH, NOTE, ELAB, "Scope \"%s\"");
  rec(ELAB_INSTANCE_PATH, NOTE, ELAB, "Instance \"%s\"");
  rec(ELAB_INTERFACE_INSTANCE_PATH, NOTE, ELAB, "Interface Instance \"%s\"");
  rec(ELAB_PROGRAM_INSTANCE_PATH, NOTE, ELAB, "Program Instance \"%s\"");
  rec(ELAB_ELABORATING_DESIGN, INFO, ELAB, "Design Elaboration..");
  rec(ELAB_ELABORATING_TESTBENCH, INFO, ELAB, "Testbench Elaboration..");
  rec(ELAB_UNDEFINED_PACKAGE, ERROR, ELAB,
      "Undefined imported package: \"%s\"");
  rec(ELAB_OUT_OF_RANGE_PARAM_INDEX, ERROR, ELAB,
      "Out of range parameter index: \"%s\"");
  rec(LIB_FILE_MAPS_TO_MULTIPLE_LIBS, ERROR, LIB,
      "File \"%exobj\" maps to multiple libraries: \"%s\"");
  return true;
}
