from enum import IntEnum


class Alignment(IntEnum):
    DEFAULT = 1
    LEFT = 2
    RIGHT = 3
    CENTER = 4


class PropertyType(IntEnum):
    """Source: https://learn.microsoft.com/en-us/openspecs/sql_server_protocols/ms-ssas-t/00a9ec7a-5f4d-4517-8091-b370fe2dc18b."""

    INVALID = -1
    ALL = 1
    REGULAR = 2
    IMAGE = 3
    IMAGE_BMP = 4
    IMAGE_GIF = 5
    IMAGE_JPG = 6
    IMAGE_PNG = 7
    IMAGE_TIFF = 8
    IMAGE_URL = 9
    ID = 10
    RELATION_TO_PARENT = 11
    SEQUENCE = 12
    ORG_TITLE = 13
    CAPTION = 14
    SHORT_CAPTION = 15
    CAPTION_DESCRIPTION = 16
    CAPTION_ABBREVIATION = 17
    WEB_URL = 18
    WEB_HTML = 19
    WEB_XML_OR_XSL = 20
    WEBMAIL_ALIAS = 21
    ADDRESS = 22
    ADDRESS_STREET = 23
    ADDRESS_HOUSE = 24
    ADDRESS_CITY = 25
    ADDRESS_STATE_OR_PROVINCE = 26
    ADDRESS_ZIP = 27
    ADDRESS_QUARTER = 28
    ADDRESS_COUNTRY = 29
    ADDRESS_BUILDING = 30
    ADDRESS_ROOM = 31
    ADDRESS_FLOOR = 32
    ADDRESS_FAX = 33
    ADDRESS_PHONE = 34
    GEO_CENTROID_X = 35
    GEO_CENTROID_Y = 36
    GEO_CENTROID_Z = 37
    GEO_BOUNDARY_TOP = 38
    GEO_BOUNDARY_LEFT = 39
    GEO_BOUNDARY_BOTTOM = 40
    GEO_BOUNDARY_RIGHT = 41
    GEO_BOUNDARY_FRONT = 42
    GEO_BOUNDARY_REAR = 43
    GEO_BOUNDARY_POLYGON = 44
    PHYSICAL_SIZE = 45
    PHYSICAL_COLOR = 46
    PHYSICAL_WEIGHT = 47
    PHYSICAL_HEIGHT = 48
    PHYSICAL_WIDTH = 49
    PHYSICAL_DEPTH = 50
    PHYSICAL_VOLUME = 51
    PHYSICAL_DENSITY = 52
    PERSON_FULL_NAME = 53
    PERSON_FIRST_NAME = 54
    PERSON_LAST_NAME = 55
    PERSON_MIDDLE_NAME = 56
    PERSON_DEMOGRAPHIC = 57
    PERSON_CONTACT = 58
    QTY_RANGE_LOW = 59
    QTY_RANGE_HIGH = 60
    FORMATTING_COLOR = 61
    FORMATTING_ORDER = 62
    FORMATTING_FONT = 63
    FORMATTING_FONT_EFFECTS = 64
    FORMATTING_FONT_SIZE = 65
    FORMATTING_SUBTOTAL = 66
    DATE = 67
    DATE_START = 68
    DATE_ENDED = 69
    DATE_CANCELED = 70
    DATE_MODIFIED = 71
    DATE_DURATION = 72
    VERSION = 73
    YEARS = 74
    QUARTERS = 75
    MONTHS = 76
    WEEKS = 77
    DAYS = 78
    HOURS = 79
    MINUTES = 80
    SECONDS = 81
    UNDEFINED_TIME = 82
    ORGANIZATIONAL_UNIT = 83
    BOM_RESOURCE = 84
    QUANTITATIVE = 85
    ACCOUNT = 86
    CUSTOMERS = 87
    CUSTOMER_GROUP = 88
    CUSTOMER_HOUSEHOLD = 89
    PRODUCT = 90
    PRODUCT_GROUP = 91
    SCENARIO = 92
    UTILITY = 93
    PERSON = 94
    COMPANY = 95
    CURRENCY_SOURCE = 96
    CURRENCY_DESTINATION = 97
    CHANNEL = 98
    REPRESENTATIVE = 99
    PROMOTION = 100
    CONTINENT = 101
    REGION = 102
    COUNTRY = 103
    STATE_OR_PROVINCE = 104
    COUNTY = 105
    CITY = 106
    POSTAL_CODE = 107
    POINT = 108
    ACCOUNT_TYPE = 109
    ACCOUNT_NAME = 110
    ACCOUNT_NUMBER = 111
    PROJECT_NAME = 112
    PROJECT_CODE = 113
    PROJECT_START_DATE = 114
    PROJECT_END_DATE = 115
    PROJECT_COMPLETION = 116
    CURRENCY_NAME = 117
    CURRENCY_IS_O_CODE = 118
    PERCENT_OWNERSHIP = 119
    PERCENT_VOTERIGHT = 120
    PROJECT = 121
    RATE_TYPE = 122
    RATE = 123
    PRODUCT_SKU = 124
    PRODUCT_CATEGORY = 125
    PRODUCT_BRAND = 126
    DELETED_FLAG = 127
    SCD_STATUS = 128
    SCD_END_DATE = 129
    SCD_ORIGINAL_ID = 130
    SCD_START_DATE = 131
    DAY_OF_MONTH_OR_PERIOD = 132
    WEEK_OF_QUARTER = 133
    WEEK_OF_MONTH_OR_PERIOD = 134
    MONTH_OR_PERIOD_OF_QUARTER = 135
    MONTH_OR_PERIOD_OF_YEAR = 136
    TRIMESTERS = 137
    HALFYEARS = 138
    TENDAYS = 139
    DAY_OF_WEEK = 140
    DAY_OF_TENDAYS = 141
    DAY_OF_MONTH = 142
    DAY_OF_QUARTER = 143
    DAY_OF_TRIMESTER = 144
    DAY_OF_HALFYEAR = 145
    DAY_OF_YEAR = 146
    WEEK_OF_YEAR = 147
    TENDAY_OF_MONTH = 148
    TENDAY_OF_QUARTER = 149
    TENDAY_OF_TRIMESTER = 150
    TENDAY_OF_HALFYEAR = 151
    TENDAY_OF_YEAR = 152
    MONTH_OF_TRIMESTER = 153
    MONTH_OF_QUARTER = 154
    MONTH_OF_HALFYEAR = 155
    MONTH_OF_YEAR = 156
    TRIMESTER_OF_YEAR = 157
    QUARTER_OF_HALFYEAR = 158
    QUARTER_OF_YEAR = 159
    HALFYEAR_OF_YEAR = 160
    FISCAL_DATE = 161
    FISCAL_DAY_OF_WEEK = 162
    FISCAL_DAY_OF_MONTH = 163
    FISCAL_DAY_OF_QUARTER = 164
    FISCAL_DAY_OF_TRIMESTER = 165
    FISCAL_DAY_OF_HALFYEAR = 166
    FISCAL_DAY_OF_YEAR = 167
    FISCAL_WEEKS = 168
    FISCAL_WEEK_OF_YEAR = 169
    FISCAL_WEEK_OF_HALFYEAR = 170
    FISCAL_WEEK_OF_QUARTER = 171
    FISCAL_WEEK_OF_TRIMESTER = 172
    FISCAL_WEEK_OF_MONTH = 173
    FISCAL_MONTHS = 174
    FISCAL_MONTH_OF_TRIMESTER = 175
    FISCAL_MONTH_OF_QUARTER = 176
    FISCAL_MONTH_OF_HALFYEAR = 177
    FISCAL_MONTH_OF_YEAR = 178
    FISCAL_TRIMESTERS = 179
    FISCAL_TRIMESTER_OF_YEAR = 180
    FISCAL_QUARTERS = 181
    FISCAL_QUARTER_OF_YEAR = 182
    FISCAL_QUARTER_OF_HALFYEAR = 183
    FISCAL_HALFYEARS = 184
    FISCAL_HALFYEAR_OF_YEAR = 185
    FISCAL_YEARS = 186
    REPORTING_DATE = 187
    REPORTING_DAY_OF_WEEK = 188
    REPORTING_DAY_OF_MONTH = 189
    REPORTING_DAY_OF_QUARTER = 190
    REPORTING_DAY_OF_TRIMESTER = 191
    REPORTING_DAY_OF_HALFYEAR = 192
    REPORTING_DAY_OF_YEAR = 193
    REPORTING_WEEKS = 194
    REPORTING_WEEK_OF_YEAR = 195
    REPORTING_WEEK_OF_HALFYEAR = 196
    REPORTING_WEEK_OF_QUARTER = 197
    REPORTING_WEEK_OF_TRIMESTER = 198
    REPORTING_WEEK_OF_MONTH = 199
    REPORTING_MONTHS = 200
    REPORTING_MONTH_OF_TRIMESTER = 201
    REPORTING_MONTH_OF_QUARTER = 202
    REPORTING_MONTH_OF_HALFYEAR = 203
    REPORTING_MONTH_OF_YEAR = 204
    REPORTING_TRIMESTERS = 205
    REPORTING_TRIMESTER_OF_YEAR = 206
    REPORTING_QUARTERS = 207
    REPORTING_QUARTER_OF_YEAR = 208
    REPORTING_QUARTER_OF_HALFYEAR = 209
    REPORTING_HALFYEARS = 210
    REPORTING_HALFYEAR_OF_YEAR = 211
    REPORTING_YEARS = 212
    MANUFACTURING_DATE = 213
    MANUFACTURING_DAY_OF_WEEK = 214
    MANUFACTURING_DAY_OF_MONTH = 215
    MANUFACTURING_DAY_OF_QUARTER = 216
    MANUFACTURING_DAY_OF_HALFYEAR = 217
    MANUFACTURING_DAY_OF_YEAR = 218
    MANUFACTURING_WEEKS = 219
    MANUFACTURING_WEEK_OF_YEAR = 220
    MANUFACTURING_WEEK_OF_QUARTER = 222
    MANUFACTURING_WEEK_OF_MONTH = 223
    MANUFACTURING_MONTHS = 224
    MANUFACTURING_MONTH_OF_QUARTER = 225
    MANUFACTURING_MONTH_OF_HALFYEAR = 226
    MANUFACTURING_MONTH_OF_YEAR = 227
    MANUFACTURING_TRIMESTERS = 228
    MANUFACTURING_TRIMESTER_OF_YEAR = 229
    MANUFACTURING_QUARTERS = 230
    MANUFACTURING_QUARTER_OF_YEAR = 231
    MANUFACTURING_QUARTER_OF_HALFYEAR = 232
    MANUFACTURING_HALFYEARS = 233
    MANUFACTURING_HALFYEAR_OF_YEAR = 234
    MANUFACTURING_YEARS = 235
    WINTER_SUMMER_SEASON = 236
    IS_HOLIDAY = 237
    IS_WEEKDAY = 238
    IS_WORKING_DAY = 239
    IS_PEAK_DAY = 240
    ISO8601_DATE = 241
    ISO8601_DAY_OF_WEEK = 242
    ISO8601_DAY_OF_YEAR = 243
    ISO8601_WEEKS = 244
    ISO8601_WEEK_OF_YEAR = 245
    ISO8601_YEARS = 246
    ROW_NUMBER = 247
    EXTENDED_TYPE = 248


class SummarizedBy(IntEnum):
    DEFAULT = 1
    _NONE = 2
    SUM = 3
    MIN = 4
    MAX = 5
    COUNT = 6
    AVERAGE = 7
    COUNT_DISTINCT = 8


class ColumnType(IntEnum):
    DATA = 1
    """A standard column"""

    CALCULATED = 2
    """A DAX-calculated column"""

    ROW_NUMBER = 3
    """Hidden row number column on each table"""

    CALCULATED_TABLE_COLUMN = 4


class EncodingHint(IntEnum):
    DEFAULT = 0
    HASH = 1
    VALUE = 2
