# -*- coding: utf-8 -*-

"""
***************************************************************************
    SagaGroupNameDecorator.py
    ---------------------
    Date                 : August 2012
    Copyright            : (C) 2012 by Victor Olaya
    Email                : volayaf at gmail dot com
***************************************************************************
*                                                                         *
*   This program is free software; you can redistribute it and/or modify  *
*   it under the terms of the GNU General Public License as published by  *
*   the Free Software Foundation; either version 2 of the License, or     *
*   (at your option) any later version.                                   *
*                                                                         *
***************************************************************************
"""

__author__ = 'Victor Olaya'
__date__ = 'August 2012'
__copyright__ = '(C) 2012, Victor Olaya'

groups = {'grid_analysis': 'Raster analysis',
          'grid_calculus': 'Raster calculus',
          'grid_calculus_bsl': 'Raster calculus',
          'grid_discretisation': 'Raster analysis',
          'grid_filter': 'Raster filter',
          'grid_gridding': 'Raster creation tools',
          'grid_spline': 'Raster creation tools',
          'grid_tools': 'Raster tools',
          'contrib_perego': 'Raster tools',
          'climate_tools': 'Climate tools',
          'grid_visualisation': 'Raster visualization',
          'imagery_classification': 'Image analysis',
          'imagery_rga': 'Image analysis',
          'imagery_segmentation': 'Image analysis',
          'imagery_tools': 'Image analysis',
          'imagery_maxent': 'Image analysis',
          'imagery_opencv': 'Image analysis',
          'imagery_vigra': 'Image analysis',
          'imagery_svm': 'Image analysis',
          'io_esri_e00': 'I/O',
          'io_gdal': 'I/O',
          'io_gps': 'I/O',
          'io_grid': 'I/O',
          'io_grid_grib2': 'I/O',
          'io_grid_image': 'I/O',
          'io_odbc': 'I/O',
          'io_shapes': 'I/O',
          'io_shapes_dxf': 'I/O',
          'io_shapes_las': 'I/O',
          'io_table': 'I/O',
          'pj_georeference': 'Georeferencing',
          'pj_geotrans': 'Projections and Transformations',
          'pj_proj4': 'Projections and Transformations',
          'pointcloud_tools': 'Point clouds',
          'shapes_grid': 'Vector <-> raster',
          'shapes_lines': 'Vector line tools',
          'shapes_points': 'Vector point tools',
          'shapes_polygons': 'Vector polygon tools',
          'shapes_tools': 'Vector general',
          'shapes_transect': 'Vector general',
          'sim_cellular_automata': 'Simulation',
          'sim_ecosystems_hugget': 'Simulation',
          'sim_fire_spreading': 'Simulation',
          'sim_hydrology': 'Simulation',
          'sim_rivflow': 'Simulation',
          'sim_qm_of_esp': 'Simulation',
          'statistics_grid': 'Geostatistics',
          'statistics_kriging': 'Raster creation tools',
          'statistics_points': 'Geostatistics',
          'statistics_regression': 'Geostatistics',
          'ta_channels': 'Terrain Analysis - Channels',
          'ta_compound': 'Terrain Analysis - Morphometry',
          'ta_hydrology': 'Terrain Analysis - Hydrology',
          'ta_lighting': 'Terrain Analysis - Lighting',
          'ta_morphometry': 'Terrain Analysis - Morphometry',
          'ta_slope_stability': 'Terrain Analysis - Morphometry',
          'ta_preprocessor': 'Terrain Analysis - Hydrology',
          'ta_profiles': 'Terrain Analysis - Profiles',
          'table_calculus': 'Table tools',
          'table_tools': 'Table tools',
          'tin_tools': 'TIN'}


def decoratedGroupName(name):
    return groups.get(name, name)


algorithms = {'Add Grid Values to Points': 'Add raster values to points',
              'Add Grid Values to Shapes': 'Add raster values to features',
              'Change Grid Values': 'Reclassify values (simple)',
              'Clip Grid with Polygon': 'Clip raster with polygon',
              'Contour Lines from Grid': 'Contour Lines',
              'Cubic Spline Approximation': 'Interpolate (Cubic spline)',
              'Cut Shapes Layer': 'Cut vector Layer',
              'Directional Statistics for Single Grid': 'Directional Statistics for raster layer',
              'Filter Clumps': 'Remove small pixel clumps (to no-data)',
              'Fire Risk Analysis': 'Fire Risk Analysis',
              'Fit N Points to shape': 'Fit n points in polygon',
              'Flat Detection': 'Flat Detection',
              'Flow Accumulation (Flow Tracing)': 'Catchment area (Flow Tracing)',
              'Flow Accumulation (Recursive)': 'Catchment area (Recursive)',
              'Flow Accumulation (Top-Down)': 'Catchment area',
              'GWR for Multiple Predictor Grids': 'GWR for Multiple Predictor layers',
              'GWR for Single Predictor Grid': 'GWR for Single Predictor layer',
              'Geographically Weighted Multiple Regression (Points/Grids)': 'Geographically Weighted Multiple Regression (Points/Raster)',
              'Geographically Weighted Regression (Points/Grid)': 'Geographically Weighted Regression (Points/Raster)',
              'Geometric Figures': 'Geometric Figures',
              'Get Shapes Extents': 'Feature extents',
              "Global Moran's I for Grids": "Global Moran's I for raster layer",
              'Grid Buffer': 'Raster Buffer',
              'Grid Cell Index': 'Raster Cell Index',
              'Grid Difference': 'Raster Difference',
              'Grid Division': 'Raster Division',
              'Grid Masking': 'Raster Masking',
              'Grid Normalisation': 'Raster Normalisation',
              'Grid Orientation': 'Raster Orientation',
              'Grid Proximity Buffer': 'Raster Proximity Buffer',
              'Grid Skeletonization': 'Raster Skeletonization',
              'Grid Standardisation': 'Raster Standardisation',
              'Grid Statistics for Polygons': 'Raster Statistics for Polygons',
              'Grid Values to Points': 'Raster Values to Points',
              'Grid Values to Points (randomly)': 'Raster Values to Points (randomly)',
              'Grid Volume': 'Raster Volume',
              'Grids Product': 'Raster Product',
              'Grids Sum': 'Rasters Sum',
              'Inverse Distance Weighted': 'Inverse Distance Weighted Interpolation',
              'Identity': 'Polygon identity',
              'Merge Layers': 'Merge vector layers',
              'Modified Quadratic Shepard': 'Modified Quadratic Shepard interpolation',
              'Mosaick raster layers': 'Mosaic raster layers',
              'Multilevel B-Spline Interpolation': 'Multilevel B-Spline Interpolation',
              'Multilevel B-Spline Interpolation (from Grid)': 'Multilevel B-Spline Interpolation (from Raster)',
              'Multiple Regression Analysis (Grid/Grids)': 'Multiple Regression Analysis (Raster/Raster)',
              'Multiple Regression Analysis (Points/Grids)': 'Multiple Regression Analysis (Points/Raster)',
              'Proximity Grid': 'Proximity Raster',
              'QuadTree Structure to Shapes': 'QuadTree Structure to polygons',
              'Radius of Variance (Grid)': 'Radius of Variance (Raster)',
              'Reclassify Grid Values': 'Reclassify values',
              'Reclassify Grid Values (Table)': 'Reclassify values (Table)',
              'Reclassify Grid Values (Range)': 'Reclassify values (Range)',
              'Reclassify Grid Values (Single)': 'Reclassify values (Single)',
              'Shapes Buffer (Attribute distance)': 'Variable distance buffer',
              'Shapes Buffer (Fixed distance)': 'fixed distance buffer',
              'Shapes to Grid': 'Rasterize',
              'Statistics for Grids': 'Statistics for Rasters',
              'Terrain Ruggedness Index (TRI)': 'Terrain Ruggedness Index (TRI)',
              'Thin Plate Spline (Global)': 'Thin Plate Spline (Global)',
              'Thin Plate Spline (Local)': 'Thin Plate Spline (Local)',
              'Thin Plate Spline (TIN)': 'Thin Plate Spline (TIN)',
              'Threshold Buffer': 'Threshold raster buffer',
              'Transform Shapes': 'Transform vector layer',
              'Transpose Grids': 'Transpose Raster layers',
              'Union': 'Polygon union',
              'Update': 'Polygon update',
              'Upslope Area': 'Upslope Area',
              'Zonal Grid Statistics': 'Zonal raster statistics'}


def decoratedAlgorithmName(name):
    decorated = algorithms.get(name, name)
    return decorated[0].upper() + decorated[1:].lower()
