#pragma once
/*=========================================================================

 medInria

 Copyright (c) INRIA 2013 - 2020. All rights reserved.
 See LICENSE.txt for details.
 
  This software is distributed WITHOUT ANY WARRANTY; without even
  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  PURPOSE.

=========================================================================*/

#include <medVtkInriaExport.h>

#include <vector>

#include <vtkObject.h>
#include <vtkLookupTable.h>

#include <QStringList>

class MEDVTKINRIA_EXPORT vtkLookupTableManager: public vtkObject
{

 public:

  //BTX
  enum LookupTableIds
  {
    LUT_BW = 0,
    LUT_BWINV,
    LUT_SPECTTUM,
    LUT_HOTMETAL,
    LUT_HOTGREEN,
    LUT_HOTIRON,
    LUT_GECOLORS,
    LUT_FLOW,
    LUT_LONI,
    LUT_LONI2,
    LUT_ASYMETRY,
    LUT_PVALUE,
    LUT_ROI,
    LUT_VRMUSCLESBONES,
    LUT_VRBONES,
    LUT_VRREDVESSELS,
    LUT_BLACKBODY,
    LUT_CARDIAC,
    LUT_GRAYRAINBOW,
    LUT_STERN,
    LUT_JET,
    LUT_BINARY_MAP
  };
  //ETX

  static vtkLookupTableManager* New();
  vtkTypeMacro (vtkLookupTableManager, vtkObject)

  static vtkLookupTable* GetBWLookupTable();

  static vtkLookupTable* GetBWInverseLookupTable();

  static vtkLookupTable* GetSpectrumLookupTable();

  static vtkLookupTable* GetHotMetalLookupTable();

  static vtkLookupTable* GetGEColorLookupTable();

  static vtkLookupTable* GetFlowLookupTable();

  static vtkLookupTable* GetLONILookupTable();

  static vtkLookupTable *GetLONIInversedLookupTable();

  static vtkLookupTable* GetLONI2LookupTable();

  static vtkLookupTable* GetAsymmetryLookupTable();

  static vtkLookupTable* GetPValueLookupTable();

  static vtkLookupTable* GetRedBlackAlphaLookupTable();

  static vtkLookupTable* GetGreenBlackAlphaLookupTable();

  static vtkLookupTable* GetBlueBlackAlphaLookupTable();

  static vtkLookupTable* GetROILookupTable();

  static vtkLookupTable* GetVRMusclesBonesLookupTable();

  static vtkLookupTable* GetCardiacLookupTable();

  static vtkLookupTable* GetGrayRainbowLookupTable();
  
  static vtkLookupTable* GetHotGreenLookupTable();
  
  static vtkLookupTable* GetHotIronLookupTable();
  
  static vtkLookupTable* GetSternLookupTable();
  
  static vtkLookupTable* GetVRBonesLookupTable();
  
  static vtkLookupTable* GetVRRedVesselsLookupTable();
  
  static vtkLookupTable* GetBlackBodyLookupTable();
  
  static vtkLookupTable* GetJetLookupTable();

  static vtkLookupTable* GetBinaryMapLookupTable();
  
  //BTX
  static std::vector<std::string> GetAvailableLookupTables();
  //ETX

  static QStringList GetAvailableLookupTablesInStringList();
  
  static vtkLookupTable* GetLookupTable(const int &);
  //BTX
  static vtkLookupTable* GetLookupTable(const std::string &);
  //ETX

  static vtkLookupTable* removeLUTAlphaChannel(vtkLookupTable * lut);

protected:
  vtkLookupTableManager();
  ~vtkLookupTableManager();

 private:

};
