//****************************************************************************//
// error.h                                                                    //
// Copyright (C) 2001, 2002 Bruno 'Beosil' Heidelberger                       //
//****************************************************************************//
// This library is free software; you can redistribute it and/or modify it    //
// under the terms of the GNU Lesser General Public License as published by   //
// the Free Software Foundation; either version 2.1 of the License, or (at    //
// your option) any later version.                                            //
//****************************************************************************//

#ifndef CAL_ERROR_H
#define CAL_ERROR_H

#include "cal3d/global.h"

#undef INVALID_HANDLE

namespace CalError
{
  enum Code
  {
    OK = 0,
    INTERNAL,
    INVALID_HANDLE,
    MEMORY_ALLOCATION_FAILED,
    FILE_NOT_FOUND,
    INVALID_FILE_FORMAT,
    FILE_PARSER_FAILED,
    INDEX_BUILD_FAILED,
    NO_PARSER_DOCUMENT,
    INVALID_ANIMATION_DURATION,
    BONE_NOT_FOUND,
    INVALID_ATTRIBUTE_VALUE,
    INVALID_KEYFRAME_COUNT,
    INVALID_ANIMATION_TYPE,
    FILE_CREATION_FAILED,
    FILE_WRITING_FAILED,
    INCOMPATIBLE_FILE_VERSION,
    NO_MESH_IN_MODEL,
    BAD_DATA_SOURCE,
    NULL_BUFFER,
    INVALID_MIXER_TYPE,
    MAX_ERROR_CODE
  };

  CAL3D_API Code getLastErrorCode();
  CAL3D_API const std::string& getLastErrorFile();
  CAL3D_API int getLastErrorLine();
  CAL3D_API const std::string& getLastErrorText();
  CAL3D_API void printLastError();
  CAL3D_API void setLastError(Code code, const std::string& strFile, int line, const std::string& strText = "");

  CAL3D_API std::string getErrorDescription(Code code);

  inline std::string getLastErrorDescription() {
      return getErrorDescription(getLastErrorCode());
  }
}

#endif
