import enum


INVALID = 'INVALID'  # Unmapped values fallback.


class RoadManager(enum.Enum):
    MUNICIPALITY = 'MUNICIPALITY'
    PROVINCE = 'PROVINCE'
    STATE = 'STATE'
    WATER_AUTHORITY = 'WATER_AUTHORITY'
    PRIVATE = 'PRIVATE'


class SpeedProfile(enum.Enum):
    NON_URBAN_TRAFFIC = 'NON_URBAN_TRAFFIC'
    URBAN_TRAFFIC_NORMAL = 'URBAN_TRAFFIC_NORMAL'
    URBAN_TRAFFIC_STAGNATING = 'URBAN_TRAFFIC_STAGNATING'
    URBAN_TRAFFIC_FREE_FLOW = 'URBAN_TRAFFIC_FREE_FLOW'


class MonitorSubstance(enum.Enum):
    NONE = 'NONE'
    PM10_ONLY = 'PM10_ONLY'
    ALL = 'ALL'


class RejectionGround(enum.Enum):
    NONE = 'NONE'
    COMPLIANCE_CRITERION = 'COMPLIANCE_CRITERION'
    EXPOSURE_CRITERION = 'EXPOSURE_CRITERION'
    OTHER = 'OTHER'


class RoadProfile(enum.Enum):
    WIDE_STREET_CANYON = 'WIDE_STREET_CANYON'
    NARROW_STREET_CANYON = 'NARROW_STREET_CANYON'
    ONE_SIDE_BUILDINGS = 'ONE_SIDE_BUILDINGS'
    OTHER = 'OTHER'


class VehicleType(enum.Enum):
    LIGHT_TRAFFIC = 'LIGHT_TRAFFIC'
    NORMAL_FREIGHT = 'NORMAL_FREIGHT'
    HEAVY_FREIGHT = 'HEAVY_FREIGHT'
    AUTO_BUS = 'AUTO_BUS'


class TreeProfile(enum.Enum):
    NONE_OR_FEW = 'NONE_OR_FEW'
    SEPARATED = 'SEPARATED'
    PACKED = 'PACKED'


class Substance(enum.Enum):
    NH3 = 'NH3'
    NOX = 'NOX'
    NO2 = 'NO2'
    PM10 = 'PM10'
    PM25 = 'PM25'
    EC = 'EC'


class Category(enum.Enum):
    NATIONAL_ROAD = 'NATIONAL_ROAD'
    FREEWAY = 'FREEWAY'
    FREEWAY_STRICT_ENFORCEMENT = 'FREEWAY_STRICT_ENFORCEMENT'


class CorrectionCode(enum.Enum):
    CORRECTION_FIELD = 'CORRECTION_FIELD'
    POINT_SPECIFIC = 'POINT_SPECIFIC'


class Generic(enum.Enum):
    USER_SPECIFIC = 'USER_SPECIFIC'
    GENERIC = 'GENERIC'


class NSLMonitoring(enum.Enum):
    RECEPTORID = 'receptorid'
    RECEPTOR_ID = 'receptor_id'
    OVERHEIDID = 'overheidid'
    NAAM = 'naam'
    NSL = 'nsl'
    GROND = 'grond'
    OPMERKING = 'opmerking'
    GEOMET_WKT = 'geomet_wkt'
    SEGMENT_ID = 'segment_id'
    WEGTYPE = 'wegtype'
    BOOM_FACT = 'boom_fact'
    AFSTAND = 'afstand'
    STRAATNAAM = 'straatnaam'
    WEGBEHEER = 'wegbeheer'
    SNELHEID = 'snelheid'
    TUN_FACTOR = 'tun_factor'
    INT_LV = 'int_lv'
    STAGF_LV = 'stagf_lv'
    INT_MV = 'int_mv'
    STAGF_MV = 'stagf_mv'
    INT_ZV = 'int_zv'
    STAGF_ZV = 'stagf_zv'
    INT_BV = 'int_bv'
    STAGF_BV = 'stagf_bv'
    HOOGTE = 'hoogte'
    MAXSNELH_P = 'maxsnelh_p'
    MAXS_P_DYN = 'maxs_p_dyn'
    A_SCHERM_L = 'a_scherm_l'
    S_HOOGTE_L = 's_hoogte_l'
    A_SCHERM_R = 'a_scherm_r'
    S_HOOGTE_R = 's_hoogte_r'
    INT_LV_DYN = 'int_lv_dyn'
    OVERHEID = 'overheid'
    STOF = 'stof'
    CORRECTIE = 'correctie'
    MAATR_ID = 'maatr_id'
    FACTOR = 'factor'
    VOERTUIG = 'voertuig'
    NUMMER = 'nummer'
    X_POS = 'x'
    Y_POS = 'y'
    TYPE = 'type'
    AANT_PERS = 'aant_pers'
    OPM_OVDR = 'opm_ovdr'
    GEWIJZIGD = 'gewijzigd'
    ACTIE = 'actie'
    NWB_WEG_ID = 'nwb_weg_id'
    NWB_VERSIE = 'nwb_versie'
    BEGIN_POS = 'begin_pos'
    EIND_POS = 'eind_pos'
    STRAATNR = 'straatnr'
    MAXSNELH_V = 'maxsnelh_v'
    A_RAND_L = 'a_rand_l'
    A_GEVEL_L = 'a_gevel_l'
    BEBDICHT_L = 'bebdicht_l'
    A_TOEPAS_L = 'a_toepas_l'
    A_RAND_R = 'a_rand_r'
    A_GEVEL_R = 'a_gevel_r'
    BEBDICHT_R = 'bebdicht_r'
    A_TOEPAS_R = 'a_toepas_r'
    CATEGORIE = 'categorie'
    GENERIEK = 'generiek'
    CORRECTIE_ID = 'correctie_id'
    VARIANT_ID = 'variant_id'
    JAAR = 'jaar'
    CODE = 'code'
    REKENJAAR = 'rekenjaar'
    CONC_NO2 = 'conc_no2'
    CONC_PM10 = 'conc_pm10'
    CONC_PM25 = 'conc_pm25'
    CONC_EC = 'conc_ec'
    NO2_OU = 'no2_ou'
    PM10_OD = 'pm10_od'
    ACHTG_NO2 = 'achtg_no2'
    ACHTG_PM10 = 'achtg_pm10'
    ACHTG_PM25 = 'achtg_pm25'
    ACHTG_EC = 'achtg_ec'
    SRM2_NO2DU = 'srm2_no2du'
    SRM2_PM10 = 'srm2_pm10'
    SRM2_PM25 = 'srm2_pm25'
    SRM2_EC = 'srm2_ec'
    SRM1_NO2DU = 'srm1_no2du'
    SRM1_PM10 = 'srm1_pm10'
    SRM1_PM25 = 'srm1_pm25'
    SRM1_EC = 'srm1_ec'
    MRONDE = 'mronde'
    SRM2_NOX = 'srm2_nox'
    SRM2_NO2 = 'srm2_no2'
    SRM2_FNO2 = 'srm2_fno2'
    SRM1_NOX = 'srm1_nox'
    SRM1_FNO2 = 'srm1_fno2'
    WIND_SPEED = 'wind_speed'
    GCN_NO2 = 'gcn_no2'
    GCN_O3 = 'gcn_o3'
    GCN_PM10 = 'gcn_pm10'
    GCN_PM25 = 'gcn_pm25'
    GCN_EC = 'gcn_ec'
    BG_C_NO2 = 'bg_c_no2'
    BG_C_O3 = 'bg_c_o3'
    BG_C_PM10 = 'bg_c_pm10'
    BG_C_PM25 = 'bg_c_pm25'
    AIR_NO2 = 'air_no2'
    AIR_O3 = 'air_o3'
    C_AIR_NO2 = 'c_air_no2'
    C_AIR_O3 = 'c_air_o3'
    C_HWN_NO2 = 'c_hwn_no2'
    C_HWN_O3 = 'c_hwn_o3'
    C_HWN_PM10 = 'c_hwn_pm10'
    C_HWN_PM25 = 'c_hwn_pm25'
    C_HWN_EC = 'c_hwn_ec'
    ACHTG_O3 = 'achtg_o3'
    AACHT_NO2 = 'aacht_no2'
    AACHT_O3 = 'aacht_o3'
    AACHT_PM10 = 'aacht_pm10'
    AACHT_PM25 = 'aacht_pm25'


class Aerius(enum.Enum):
    CALCULATION_POINT_ID = 'calculation_point_id'
    JURISDICTION_ID = 'jurisdiction_id'
    LABEL = 'label'
    MONITOR_SUBSTANCE = 'monitor_substance'
    REJECTION_GROUND = 'rejection_ground'
    DESCRIPTION = 'description'
    GEOMETRY = 'geometry'
    SRM1_ROAD_ID = 'srm1_road_id'
    ROAD_PROFILE = 'road_profile'
    TREE_PROFILE = 'tree_profile'
    DISTANCE = 'distance'
    ROAD_MANAGER = 'road_manager'
    SPEED_PROFILE = 'speed_profile'
    TUNNEL_FACTOR = 'tunnel_factor'
    LIGHT_TRAFFIC_INTENSITY = 'light_traffic_intensity'
    LIGHT_TRAFFIC_STAGNATION_FACTOR = 'light_traffic_stagnation_factor'
    NORMAL_FREIGHT_INTENSITY = 'normal_freight_intensity'
    NORMAL_FREIGHT_STAGNATION_FACTOR = 'normal_freight_stagnation_factor'
    HEAVY_FREIGHT_INTENSITY = 'heavy_freight_intensity'
    HEAVY_FREIGHT_STAGNATION_FACTOR = 'heavy_freight_stagnation_factor'
    AUTO_BUS_INTENSITY = 'auto_bus_intensity'
    AUTO_BUS_STAGNATION_FACTOR = 'auto_bus_stagnation_factor'
    SRM2_ROAD_ID = 'srm2_road_id'
    CATEGORY = 'category'
    MAX_SPEED = 'max_speed'
    DYNAMIC_MAX_SPEED = 'dynamic_max_speed'
    BARRIER_LEFT_DISTANCE = 'barrier_left_distance'
    BARRIER_LEFT_HEIGHT = 'barrier_left_height'
    BARRIER_RIGHT_DISTANCE = 'barrier_right_distance'
    BARRIER_RIGHT_HEIGHT = 'barrier_right_height'
    LIGHT_TRAFFIC_DYNAMIC_INTENSITY = 'light_traffic_dynamic_intensity'
    MEASURE_ID = 'measure_id'
    SUBSTANCE = 'substance'
    FACTOR = 'factor'
    VEHICLE_TYPE = 'vehicle_type'
    VALUE = 'value'
    ELEVATION_HEIGHT = 'elevation_height'
    CALCULATION_YEAR = 'calculation_year'
    AERIUS_VERSION = 'aerius_version'
    AERIUS_DATABASE_VERSION = 'aerius_database_version'
    NO2_TOTAL_CONCENTRATION = 'NO2_total_concentration'
    PM10_TOTAL_CONCENTRATION = 'PM10_total_concentration'
    PM25_TOTAL_CONCENTRATION = 'PM25_total_concentration'
    EC_TOTAL_CONCENTRATION = 'EC_total_concentration'
    NO2_EXCEEDANCE_HOURS = 'NO2_exceedance_hours'
    PM10_EXCEEDANCE_DAYS = 'PM10_exceedance_days'
    NO2_BACKGROUND_CONCENTRATION = 'NO2_background_concentration'
    PM10_BACKGROUND_CONCENTRATION = 'PM10_background_concentration'
    PM25_BACKGROUND_CONCENTRATION = 'PM25_background_concentration'
    EC_BACKGROUND_CONCENTRATION = 'EC_background_concentration'
    NO2_SRM2_CONCENTRATION_DIRECT = 'NO2_SRM2_concentration_direct'
    PM10_SRM2_CONCENTRATION = 'PM10_SRM2_concentration'
    PM25_SRM2_CONCENTRATION = 'PM25_SRM2_concentration'
    EC_SRM2_CONCENTRATION = 'EC_SRM2_concentration'
    NO2_SRM1_CONCENTRATION_DIRECT = 'NO2_SRM1_concentration_direct'
    PM10_SRM1_CONCENTRATION = 'PM10_SRM1_concentration'
    PM25_SRM1_CONCENTRATION = 'PM25_SRM1_concentration'
    EC_SRM1_CONCENTRATION = 'EC_SRM1_concentration'
    NOX_SRM2_CONCENTRATION = 'NOx_SRM2_concentration'
    NO2_GCN_BACKGROUND_CONCENTRATION = 'NO2_GCN_background_concentration'
    PM10_GCN_BACKGROUND_CONCENTRATION = 'PM10_GCN_background_concentration'
    PM25_GCN_BACKGROUND_CONCENTRATION = 'PM25_GCN_background_concentration'
    NOX_SRM1_CONCENTRATION = 'NOx_SRM1_concentration'
    EC_GCN_BACKGROUND_CONCENTRATION = 'EC_GCN_background_concentration'
    NO2_GCN_MAIN_ROADS_CORRECTION = 'NO2_GCN_main_roads_correction'
    PM25_GCN_MAIN_ROADS_CORRECTION = 'PM25_GCN_main_roads_correction'
    EC_GCN_MAIN_ROADS_CORRECTION = 'EC_GCN_main_roads_correction'
    O3_BACKGROUND_CONCENTRATION = 'O3_background_concentration'
    PM10_GCN_MAIN_ROADS_CORRECTION = 'PM10_GCN_main_roads_correction'
    WIND_SPEED = 'wind_speed'


class AeriusShape(enum.Enum):
    """
    These headers are the same as the Aerius ones, but shorter. This is due
    to the limited shp header length of max. 10 characters.
    """

    CALC_P_ID = 'calc_p_id'
    CALC_YEAR = 'calc_year'
    AERIUS_V = 'aerius_v'
    AERIUS_DBV = 'aerius_dbv'
    GEOMETRY = 'geometry'
    NO2_TCON = 'NO2_tcon'
    PM10_TCON = 'PM10_tcon'
    PM25_TCON = 'PM25_tcon'
    EC_TCON = 'EC_tcon'
    NO2_EXC_H = 'NO2_exc_h'
    PM10_EXC_D = 'PM10_exc_d'
    NO2_BGC = 'NO2_bgc'
    PM10_BGC = 'PM10_bgc'
    PM25_BGC = 'PM25_bgc'
    EC_BGC = 'EC_bgc'
    R2_NO2COND = 'r2_NO2conD'
    R2_PM10CON = 'r2_PM10con'
    R2_PM25CON = 'r2_PM25con'
    R2_ECCON = 'r2_ECcon'
    R1_NO2COND = 'r1_NO2conD'
    R1_PM10CON = 'r1_PM10con'
    R1_PM25CON = 'r1_PM25con'
    R1_ECCON = 'r1_ECcon'
    O3_BGC = 'O3_bgc'
    R2_NOXCON = 'r2_NOXcon'
    R1_NOXCON = 'r1_NOXcon'
    NO2GCNBGC = 'NO2gcnbgc'
    PM10GCNBGC = 'PM10gcnbgc'
    PM25GCNBGC = 'PM25gcnbgc'
    ECGCNBGC = 'ECgcnbgc'
    NO2GCNMRC = 'NO2gcnmrc'
    PM10GCNMRC = 'PM10gcnmrc'
    PM25GCNMRC = 'PM25gcnmrc'
    ECGCNMRC = 'ECgcnmrc'
    WIND_SPEED = 'wind_speed'
