conan_vtk_modules = {
    "8.1.x": {
        "module_autobahn_python"               : "Module_AutobahnPython",
        "module_poisson_reconstruction"        : "Module_PoissonReconstruction",
        "module_signed_tensor"                 : "Module_SignedTensor",
        "module_six_python"                    : "Module_SixPython",
        "module_spline_driven_image_slicer"    : "Module_SplineDrivenImageSlicer",
        "module_twisted"                       : "Module_Twisted",
        "module_wiki_examples"                 : "Module_WikiExamples",
        "module_zope_interface"                : "Module_ZopeInterface",
        "module_constantly"                    : "Module_constantly",
        "module_hyperlink"                     : "Module_hyperlink",
        "module_incremental"                   : "Module_incremental",
        "module_txaio"                         : "Module_txaio",
        "module_accelerators_vtkm"             : "Module_vtkAcceleratorsVTKm",
        "module_addon"                         : "Module_vtkAddon",
        "module_charts_core"                   : "Module_vtkChartsCore",
        "module_common_color"                  : "Module_vtkCommonColor",
        "module_common_computational_geometry" : "Module_vtkCommonComputationalGeometry",
        "module_common_core"                   : "Module_vtkCommonCore",
        "module_common_data_model"             : "Module_vtkCommonDataModel",
        "module_common_execution_model"        : "Module_vtkCommonExecutionModel",
        "module_common_math"                   : "Module_vtkCommonMath",
        "module_common_misc"                   : "Module_vtkCommonMisc",
        "module_common_system"                 : "Module_vtkCommonSystem",
        "module_common_transforms"             : "Module_vtkCommonTransforms",
        "module_dicom"                         : "Module_vtkDICOM",
        "module_dicom_parser"                  : "Module_vtkDICOMParser",
        "module_domains_chemistry"             : "Module_vtkDomainsChemistry",
        "module_domains_chemistry_opengl2"     : "Module_vtkDomainsChemistryOpenGL2",
        "module_domains_microscopy"            : "Module_vtkDomainsMicroscopy",
        "module_filters_amr"                   : "Module_vtkFiltersAMR",
        "module_filters_core"                  : "Module_vtkFiltersCore",
        "module_filters_extraction"            : "Module_vtkFiltersExtraction",
        "module_filters_flow_paths"            : "Module_vtkFiltersFlowPaths",
        "module_filters_general"               : "Module_vtkFiltersGeneral",
        "module_filters_generic"               : "Module_vtkFiltersGeneric",
        "module_filters_geometry"              : "Module_vtkFiltersGeometry",
        "module_filters_hybrid"                : "Module_vtkFiltersHybrid",
        "module_filters_hyper_tree"            : "Module_vtkFiltersHyperTree",
        "module_filters_imaging"               : "Module_vtkFiltersImaging",
        "module_filters_modeling"              : "Module_vtkFiltersModeling",
        "module_filters_openturns"             : "Module_vtkFiltersOpenTurns",
        "module_filters_parallel"              : "Module_vtkFiltersParallel",
        "module_filters_parallel_flow_paths"   : "Module_vtkFiltersParallelFlowPaths",
        "module_filters_parallel_geometry"     : "Module_vtkFiltersParallelGeometry",
        "module_filters_parallel_imaging"      : "Module_vtkFiltersParallelImaging",
        "module_filters_parallel_mpi"          : "Module_vtkFiltersParallelMPI",
        "module_filters_parallel_statistics"   : "Module_vtkFiltersParallelStatistics",
        "module_filters_parallel_verdict"      : "Module_vtkFiltersParallelVerdict",
        "module_filters_points"                : "Module_vtkFiltersPoints",
        "module_filters_programmable"          : "Module_vtkFiltersProgrammable",
        "module_filters_reeb_graph"            : "Module_vtkFiltersReebGraph",
        "module_filters_smp"                   : "Module_vtkFiltersSMP",
        "module_filters_selection"             : "Module_vtkFiltersSelection",
        "module_filters_sources"               : "Module_vtkFiltersSources",
        "module_filters_statistics"            : "Module_vtkFiltersStatistics",
        "module_filters_texture"               : "Module_vtkFiltersTexture",
        "module_filters_topology"              : "Module_vtkFiltersTopology",
        "module_filters_verdict"               : "Module_vtkFiltersVerdict",
        "module_gui_support_mfc"               : "Module_vtkGUISupportMFC",
        "module_gui_support_qt"                : "Module_vtkGUISupportQt",
        "module_gui_support_qt_opengl"         : "Module_vtkGUISupportQtOpenGL",
        "module_gui_support_qt_sql"            : "Module_vtkGUISupportQtSQL",
        "module_gui_support_qt_webkit"         : "Module_vtkGUISupportQtWebkit",
        "module_geovis_core"                   : "Module_vtkGeovisCore",
        "module_io_adios"                      : "Module_vtkIOADIOS",
        "module_io_amr"                        : "Module_vtkIOAMR",
        "module_io_core"                       : "Module_vtkIOCore",
        "module_io_ensight"                    : "Module_vtkIOEnSight",
        "module_io_exodus"                     : "Module_vtkIOExodus",
        "module_io_export"                     : "Module_vtkIOExport",
        "module_io_export_opengl"              : "Module_vtkIOExportOpenGL",
        "module_io_export_opengl2"             : "Module_vtkIOExportOpenGL2",
        "module_io_ffmpeg"                     : "Module_vtkIOFFMPEG",
        "module_io_gdal"                       : "Module_vtkIOGDAL",
        "module_io_geojson"                    : "Module_vtkIOGeoJSON",
        "module_io_geometry"                   : "Module_vtkIOGeometry",
        "module_io_image"                      : "Module_vtkIOImage",
        "module_io_import"                     : "Module_vtkIOImport",
        "module_io_infovis"                    : "Module_vtkIOInfovis",
        "module_io_las"                        : "Module_vtkIOLAS",
        "module_io_lsdyna"                     : "Module_vtkIOLSDyna",
        "module_io_legacy"                     : "Module_vtkIOLegacy",
        "module_io_minc"                       : "Module_vtkIOMINC",
        "module_io_mpi_image"                  : "Module_vtkIOMPIImage",
        "module_io_mpi_parallel"               : "Module_vtkIOMPIParallel",
        "module_io_movie"                      : "Module_vtkIOMovie",
        "module_io_mysql"                      : "Module_vtkIOMySQL",
        "module_io_netcdf"                     : "Module_vtkIONetCDF",
        "module_io_odbc"                       : "Module_vtkIOODBC",
        "module_io_pdal"                       : "Module_vtkIOPDAL",
        "module_io_ply"                        : "Module_vtkIOPLY",
        "module_io_parallel"                   : "Module_vtkIOParallel",
        "module_io_parallel_exodus"            : "Module_vtkIOParallelExodus",
        "module_io_parallel_lsdyna"            : "Module_vtkIOParallelLSDyna",
        "module_io_parallel_netcdf"            : "Module_vtkIOParallelNetCDF",
        "module_io_parallel_xml"               : "Module_vtkIOParallelXML",
        "module_io_parallel_xdmf3"             : "Module_vtkIOParallelXdmf3",
        "module_io_postgresql"                 : "Module_vtkIOPostgreSQL",
        "module_io_sql"                        : "Module_vtkIOSQL",
        "module_io_segy"                       : "Module_vtkIOSegY",
        "module_io_truchas"                    : "Module_vtkIOTRUCHAS",
        "module_io_tecplot_table"              : "Module_vtkIOTecplotTable",
        "module_io_vpic"                       : "Module_vtkIOVPIC",
        "module_io_video"                      : "Module_vtkIOVideo",
        "module_io_xml"                        : "Module_vtkIOXML",
        "module_io_xml_parser"                 : "Module_vtkIOXMLParser",
        "module_io_xdmf2"                      : "Module_vtkIOXdmf2",
        "module_io_xdmf3"                      : "Module_vtkIOXdmf3",
        "module_imaging_color"                 : "Module_vtkImagingColor",
        "module_imaging_core"                  : "Module_vtkImagingCore",
        "module_imaging_fourier"               : "Module_vtkImagingFourier",
        "module_imaging_general"               : "Module_vtkImagingGeneral",
        "module_imaging_hybrid"                : "Module_vtkImagingHybrid",
        "module_imaging_math"                  : "Module_vtkImagingMath",
        "module_imaging_morphological"         : "Module_vtkImagingMorphological",
        "module_imaging_opengl2"               : "Module_vtkImagingOpenGL2",
        "module_imaging_sources"               : "Module_vtkImagingSources",
        "module_imaging_statistics"            : "Module_vtkImagingStatistics",
        "module_imaging_stencil"               : "Module_vtkImagingStencil",
        "module_infovis_boost"                 : "Module_vtkInfovisBoost",
        "module_infovis_boost_graph_algorithms": "Module_vtkInfovisBoostGraphAlgorithms",
        "module_infovis_core"                  : "Module_vtkInfovisCore",
        "module_infovis_layout"                : "Module_vtkInfovisLayout",
        "module_interaction_image"             : "Module_vtkInteractionImage",
        "module_interaction_style"             : "Module_vtkInteractionStyle",
        "module_interaction_widgets"           : "Module_vtkInteractionWidgets",
        "module_meta_io"                       : "Module_vtkMetaIO",
        "module_parallel_core"                 : "Module_vtkParallelCore",
        "module_parallel_mpi"                  : "Module_vtkParallelMPI",
        "module_parse_ogl_ext"                 : "Module_vtkParseOGLExt",
        "module_python"                        : "Module_vtkPython",
        "module_python_interpreter"            : "Module_vtkPythonInterpreter",
        "module_rendering_annotation"          : "Module_vtkRenderingAnnotation",
        "module_rendering_context2d"           : "Module_vtkRenderingContext2D",
        "module_rendering_context_opengl"      : "Module_vtkRenderingContextOpenGL",
        "module_rendering_context_opengl2"     : "Module_vtkRenderingContextOpenGL2",
        "module_rendering_core"                : "Module_vtkRenderingCore",
        "module_rendering_external"            : "Module_vtkRenderingExternal",
        "module_rendering_freetype"            : "Module_vtkRenderingFreeType",
        "module_rendering_freetype_fontconfig" : "Module_vtkRenderingFreeTypeFontConfig",
        "module_rendering_gl2ps"               : "Module_vtkRenderingGL2PS",
        "module_rendering_gl2ps_opengl2"       : "Module_vtkRenderingGL2PSOpenGL2",
        "module_rendering_image"               : "Module_vtkRenderingImage",
        "module_rendering_lic"                 : "Module_vtkRenderingLIC",
        "module_rendering_lic_opengl2"         : "Module_vtkRenderingLICOpenGL2",
        "module_rendering_lod"                 : "Module_vtkRenderingLOD",
        "module_rendering_label"               : "Module_vtkRenderingLabel",
        "module_rendering_matplotlib"          : "Module_vtkRenderingMatplotlib",
        "module_rendering_osp_ray"             : "Module_vtkRenderingOSPRay",
        "module_rendering_oculus"              : "Module_vtkRenderingOculus",
        "module_rendering_opengl"              : "Module_vtkRenderingOpenGL",
        "module_rendering_opengl2"             : "Module_vtkRenderingOpenGL2",
        "module_rendering_openvr"              : "Module_vtkRenderingOpenVR",
        "module_rendering_optix"               : "Module_vtkRenderingOptiX",
        "module_rendering_parallel"            : "Module_vtkRenderingParallel",
        "module_rendering_parallel_lic"        : "Module_vtkRenderingParallelLIC",
        "module_rendering_qt"                  : "Module_vtkRenderingQt",
        "module_rendering_scene_graph"         : "Module_vtkRenderingSceneGraph",
        "module_rendering_tk"                  : "Module_vtkRenderingTk",
        "module_rendering_volume"              : "Module_vtkRenderingVolume",
        "module_rendering_volume_amr"          : "Module_vtkRenderingVolumeAMR",
        "module_rendering_volume_opengl"       : "Module_vtkRenderingVolumeOpenGL",
        "module_rendering_volume_opengl2"      : "Module_vtkRenderingVolumeOpenGL2",
        "module_tcl_tk"                        : "Module_vtkTclTk",
        "module_testing_core"                  : "Module_vtkTestingCore",
        "module_testing_generic_bridge"        : "Module_vtkTestingGenericBridge",
        "module_testing_io_sql"                : "Module_vtkTestingIOSQL",
        "module_testing_rendering"             : "Module_vtkTestingRendering",
        "module_utilities_benchmarks"          : "Module_vtkUtilitiesBenchmarks",
        "module_utilities_encode_string"       : "Module_vtkUtilitiesEncodeString",
        "module_utilities_hash_source"         : "Module_vtkUtilitiesHashSource",
        "module_vpic"                          : "Module_vtkVPIC",
        "module_views_context2d"               : "Module_vtkViewsContext2D",
        "module_views_core"                    : "Module_vtkViewsCore",
        "module_views_geovis"                  : "Module_vtkViewsGeovis",
        "module_views_infovis"                 : "Module_vtkViewsInfovis",
        "module_views_qt"                      : "Module_vtkViewsQt",
        "module_web_core"                      : "Module_vtkWebCore",
        "module_webgl_exporter"                : "Module_vtkWebGLExporter",
        "module_web_python"                    : "Module_vtkWebPython",
        "module_wrapping_java"                 : "Module_vtkWrappingJava",
        "module_wrapping_python_core"          : "Module_vtkWrappingPythonCore",
        "module_wrapping_tcl"                  : "Module_vtkWrappingTcl",
        "module_wrapping_tools"                : "Module_vtkWrappingTools",
        "module_alglib"                        : "Module_vtkalglib",
        "module_exodusII"                      : "Module_vtkexodusII",
        "module_expat"                         : "Module_vtkexpat",
        "module_freetype"                      : "Module_vtkfreetype",
        "module_gl2ps"                         : "Module_vtkgl2ps",
        "module_glew"                          : "Module_vtkglew",
        "module_hdf5"                          : "Module_vtkhdf5",
        "module_jpeg"                          : "Module_vtkjpeg",
        "module_jsoncpp"                       : "Module_vtkjsoncpp",
        "module_kwiml"                         : "Module_vtkkwiml",
        "module_libharu"                       : "Module_vtklibharu",
        "module_libproj4"                      : "Module_vtklibproj4",
        "module_libxml2"                       : "Module_vtklibxml2",
        "module_lz4"                           : "Module_vtklz4",
        "module_vtkm"                          : "Module_vtkm",
        "module_mpi4py"                        : "Module_vtkmpi4py",
        "module_netcdf"                        : "Module_vtknetcdf",
        "module_netcdfcpp"                     : "Module_vtknetcdfcpp",
        "module_oggtheora"                     : "Module_vtkoggtheora",
        "module_png"                           : "Module_vtkpng",
        "module_sqlite"                        : "Module_vtksqlite",
        "module_sys"                           : "Module_vtksys",
        "module_tiff"                          : "Module_vtktiff",
        "module_verdict"                       : "Module_vtkverdict",
        "module_xdmf2"                         : "Module_vtkxdmf2",
        "module_xdmf3"                         : "Module_vtkxdmf3",
        "module_zfp"                           : "Module_vtkzfp",
        "module_zlib"                          : "Module_vtkzlib",
        "module_wslink"                        : "Module_wslink",
    }
}


conan_vtk_groups = {
    "8.x.x": {
        "group_imaging"   : "VTK_Group_Imaging",
        "group_mpi"       : "VTK_Group_MPI",
        "group_qt"        : "VTK_Group_Qt",
        "group_rendering" : "VTK_Group_Rendering",
        "group_standalone": "VTK_Group_StandAlone",
        "group_tk"        : "VTK_Group_Tk",
        "group_views"     : "VTK_Group_Views",
        "group_web"       : "VTK_Group_Web",
    },
    "9.x.x": {
        "group_imaging"   : "VTK_GROUP_ENABLE_Imaging",
        "group_mpi"       : "VTK_GROUP_ENABLE_MPI",
        "group_qt"        : "VTK_GROUP_ENABLE_Qt",
        "group_rendering" : "VTK_GROUP_ENABLE_Rendering",
        "group_standalone": "VTK_GROUP_ENABLE_StandAlone",
        "group_views"     : "VTK_GROUP_ENABLE_Views",
        "group_web"       : "VTK_GROUP_ENABLE_Web",
    },
}


def match_major(version: str):
    numbers = version.split(".")
    assert len(numbers) > 0
    assert numbers[0].isdigit()
    return f"{numbers[0]}.x.x"


def match_major_minor(version: str):
    numbers = version.split(".")
    assert len(numbers) > 1
    assert numbers[0].isdigit()
    assert numbers[1].isdigit()
    return f"{numbers[0]}.{numbers[1]}.x"


def get_vtk_groups(vtk_version: str):
    major = match_major(vtk_version)
    assert major in conan_vtk_groups
    return conan_vtk_groups[major]


def get_vtk_modules(vtk_version: str):
    major_minor = match_major_minor(vtk_version)
    assert major_minor in conan_vtk_modules
    return conan_vtk_modules[major_minor]


# DCMTK_ENABLE_BUILTIN_DICTIONARY: ON
