"""
GDAL - Constant definitions
"""
from ctypes import (
    c_double, c_float, c_int16, c_int32, c_ubyte, c_uint16, c_uint32,
)

# See https://gdal.org/api/raster_c_api.html#_CPPv412GDALDataType
GDAL_PIXEL_TYPES = {
    0: 'GDT_Unknown',  # Unknown or unspecified type
    1: 'GDT_Byte',  # Eight bit unsigned integer
    2: 'GDT_UInt16',  # Sixteen bit unsigned integer
    3: 'GDT_Int16',  # Sixteen bit signed integer
    4: 'GDT_UInt32',  # Thirty-two bit unsigned integer
    5: 'GDT_Int32',  # Thirty-two bit signed integer
    6: 'GDT_Float32',  # Thirty-two bit floating point
    7: 'GDT_Float64',  # Sixty-four bit floating point
    8: 'GDT_CInt16',  # Complex Int16
    9: 'GDT_CInt32',  # Complex Int32
    10: 'GDT_CFloat32',  # Complex Float32
    11: 'GDT_CFloat64',  # Complex Float64
}

# A list of gdal datatypes that are integers.
GDAL_INTEGER_TYPES = [1, 2, 3, 4, 5]

# Lookup values to convert GDAL pixel type indices into ctypes objects.
# The GDAL band-io works with ctypes arrays to hold data to be written
# or to hold the space for data to be read into. The lookup below helps
# selecting the right ctypes object for a given gdal pixel type.
GDAL_TO_CTYPES = [
    None, c_ubyte, c_uint16, c_int16, c_uint32, c_int32,
    c_float, c_double, None, None, None, None
]

# List of resampling algorithms that can be used to warp a GDALRaster.
GDAL_RESAMPLE_ALGORITHMS = {
    'NearestNeighbour': 0,
    'Bilinear': 1,
    'Cubic': 2,
    'CubicSpline': 3,
    'Lanczos': 4,
    'Average': 5,
    'Mode': 6,
}

# See https://gdal.org/api/raster_c_api.html#_CPPv415GDALColorInterp
GDAL_COLOR_TYPES = {
    0: 'GCI_Undefined',  # Undefined, default value, i.e. not known
    1: 'GCI_GrayIndex',  # Grayscale
    2: 'GCI_PaletteIndex',  # Paletted
    3: 'GCI_RedBand',  # Red band of RGBA image
    4: 'GCI_GreenBand',  # Green band of RGBA image
    5: 'GCI_BlueBand',  # Blue band of RGBA image
    6: 'GCI_AlphaBand',  # Alpha (0=transparent, 255=opaque)
    7: 'GCI_HueBand',  # Hue band of HLS image
    8: 'GCI_SaturationBand',  # Saturation band of HLS image
    9: 'GCI_LightnessBand',  # Lightness band of HLS image
    10: 'GCI_CyanBand',  # Cyan band of CMYK image
    11: 'GCI_MagentaBand',  # Magenta band of CMYK image
    12: 'GCI_YellowBand',  # Yellow band of CMYK image
    13: 'GCI_BlackBand',  # Black band of CMLY image
    14: 'GCI_YCbCr_YBand',  # Y Luminance
    15: 'GCI_YCbCr_CbBand',  # Cb Chroma
    16: 'GCI_YCbCr_CrBand',  # Cr Chroma, also GCI_Max
}

# GDAL virtual filesystems prefix.
VSI_FILESYSTEM_PREFIX = '/vsi'

# Fixed base path for buffer-based GDAL in-memory files.
VSI_MEM_FILESYSTEM_BASE_PATH = '/vsimem/'

# Should the memory file system take ownership of the buffer, freeing it when
# the file is deleted? (No, GDALRaster.__del__() will delete the buffer.)
VSI_TAKE_BUFFER_OWNERSHIP = False

# Should a VSI file be removed when retrieving its buffer?
VSI_DELETE_BUFFER_ON_READ = False
