from enum import Enum
from zempy.zosapi.core import ZosEnumBase

class SurfaceType(ZosEnumBase):
    ABCD = 0
    ALTERNATE_EVEN = 1
    ALTERNATE_ODD = 2
    ANNULAR_ZERNIKE_SAG = 3
    ATMOSPHERIC = 4
    BICONIC = 5
    BICONIC_ZERNIKE = 6
    BINARY1 = 7
    BINARY2 = 8
    BINARY3 = 9
    BINARY4 = 10
    BIREFRINGENT_IN = 11
    BIREFRINGENT_OUT = 12
    BLACK_BOX_LENS = 13
    CHEBYSHV = 14
    CONJUGATE = 15
    COORDINATE_BREAK = 16
    CUBIC_SPLINE = 17
    CYLINDER_FRENSEL = 18
    CYLINDER_FRESNEL = 19
    DATA = 20
    DIFFRACTION_GRATING = 21
    ELLIPTICAL_GRATING1 = 22
    ELLIPTICAL_GRATING2 = 23
    EVEN_ASPHERIC = 24
    EXTENDED_TOROIDAL_GRATING = 25
    EXTENDED_ASPHERE = 26
    EXTENDED_CUBIC_SPLINE = 27
    EXTENDED_FRESNEL = 28
    EXTENDED_ODD_ASPHERE = 29
    EXTENDED_POLYNOMIAL = 30
    FRESNEL = 31
    GENERALIZED_FRESNEL = 32
    GRADIENT1 = 33
    GRADIENT2 = 34
    GRADIENT3 = 35
    GRADIENT4 = 36
    GRADIENT5 = 37
    GRADIENT6 = 38
    GRADIENT7 = 39
    GRADIENT9 = 40
    GRADIENT10 = 41
    GRADIENT12 = 42
    GRADIUM = 43
    GRID_GRADIENT = 44
    GRID_PHASE = 45
    GRID_SAG = 46
    HOLOGRAM1 = 47
    HOLOGRAM2 = 48
    IRREGULAR = 49
    JONES_MATRIX = 50
    NON_SEQUENTIAL = 51
    ODD_ASPHERE = 52
    ODD_COSINE = 53
    OFF_AXIS_CONIC_FREEFORM = 54
    OPTICALLY_FABRICATED_HOLOGRAM = 55
    PARAXIAL = 56
    PARAXIAL_XY = 57
    PERIODIC = 58
    POLYNOMIAL = 59
    QTYPE_ASPHERE = 60
    QTYPE_FREEFORM = 61
    RADIAL_GRATING = 62
    RADIAL_NURBS = 63
    RETRO_REFLECT = 64
    SLIDE_SURFACE = 65
    STANDARD = 66
    SUPERCONIC = 67
    TILTED = 68
    TOROIDAL = 69
    TOROIDAL_GRAT = 70
    TOROIDAL_HOLOGRAM = 71
    TOROIDAL_NURBS = 72
    USER_DEFINED = 73
    VARIABLE_LINE_SPACE_GRATING = 74
    ZERNIKE_ANNULAR_PHASE = 75
    ZERNIKE_FRINGE_PHASE = 76
    ZERNIKE_FRINGE_SAG = 77
    ZERNIKE_STANDARD_PHASE = 78
    ZERNIKE_STANDARD_SAG = 79
    ZONE_PLATE = 80
    FREEFORM = 81


# attach config AFTER class creation (safe from Enum)
SurfaceType._NATIVE_PATH = "ZOSAPI.Editors.LDE.SurfaceType"
SurfaceType._ALIASES_EXTRA = {
    name: (name.title().replace("_", ""),) for name in SurfaceType.__members__
}

__all__ = ["SurfaceType"]
