"""
Timezone information for the dateutil parser

All credit to https://github.com/prefrontal/dateutil-parser-timezones
"""

from dateutil.tz import gettz


def assemble_timezones():
    """
    Assembles a dictionary of timezone abbreviations and values
    :return: Dictionary of abbreviation keys and timezone values
    """
    timezones = {}

    timezones['ACDT'] = gettz('Australia/Darwin')             # Australian Central Daylight Savings Time (UTC+10:30)
    timezones['ACST'] = gettz('Australia/Darwin')             # Australian Central Standard Time (UTC+09:30)
    timezones['ACT'] = gettz('Brazil/Acre')                   # Acre Time (UTC−05)
    timezones['ADT'] = gettz('America/Halifax')               # Atlantic Daylight Time (UTC−03)
    timezones['AEDT'] = gettz('Australia/Sydney')             # Australian Eastern Daylight Savings Time (UTC+11)
    timezones['AEST'] = gettz('Australia/Sydney')             # Australian Eastern Standard Time (UTC+10)
    timezones['AFT'] = gettz('Asia/Kabul')                    # Afghanistan Time (UTC+04:30)
    timezones['AKDT'] = gettz('America/Juneau')               # Alaska Daylight Time (UTC−08)
    timezones['AKST'] = gettz('America/Juneau')               # Alaska Standard Time (UTC−09)
    timezones['AMST'] = gettz('America/Manaus')               # Amazon Summer Time (Brazil)[1] (UTC−03)
    timezones['AMT'] = gettz('America/Manaus')                # Amazon Time (Brazil)[2] (UTC−04)
    timezones['ART'] = gettz('America/Cordoba')               # Argentina Time (UTC−03)
    timezones['AST'] = gettz('Asia/Riyadh')                   # Arabia Standard Time (UTC+03)
    timezones['AWST'] = gettz('Australia/Perth')              # Australian Western Standard Time (UTC+08)
    timezones['AZOST'] = gettz('Atlantic/Azores')             # Azores Summer Time (UTC±00)
    timezones['AZOT'] = gettz('Atlantic/Azores')              # Azores Standard Time (UTC−01)
    timezones['AZT'] = gettz('Asia/Baku')                     # Azerbaijan Time (UTC+04)
    timezones['BDT'] = gettz('Asia/Brunei')                   # Brunei Time (UTC+08)
    timezones['BIOT'] = gettz('Etc/GMT+6')                    # British Indian Ocean Time (UTC+06)
    timezones['BIT'] = gettz('Pacific/Funafuti')              # Baker Island Time (UTC−12)
    timezones['BOT'] = gettz('America/La_Paz')                # Bolivia Time (UTC−04)
    timezones['BRST'] = gettz('America/Sao_Paulo')            # Brasilia Summer Time (UTC−02)
    timezones['BRT'] = gettz('America/Sao_Paulo')             # Brasilia Time (UTC−03)
    timezones['BST'] = gettz('Asia/Dhaka')                    # Bangladesh Standard Time (UTC+06)
    timezones['BTT'] = gettz('Asia/Thimphu')                  # Bhutan Time (UTC+06)
    timezones['CAT'] = gettz('Africa/Harare')                 # Central Africa Time (UTC+02)
    timezones['CCT'] = gettz('Indian/Cocos')                  # Cocos Islands Time (UTC+06:30)
    timezones['CDT'] = gettz('America/Chicago')               # Central Daylight Time (North America) (UTC−05)
    timezones['CEST'] = gettz('Europe/Berlin')                # Central European Summer Time (Cf. HAEC) (UTC+02)
    timezones['CET'] = gettz('Europe/Berlin')                 # Central European Time (UTC+01)
    timezones['CHADT'] = gettz('Pacific/Chatham')             # Chatham Daylight Time (UTC+13:45)
    timezones['CHAST'] = gettz('Pacific/Chatham')             # Chatham Standard Time (UTC+12:45)
    timezones['CHOST'] = gettz('Asia/Choibalsan')             # Choibalsan Summer Time (UTC+09)
    timezones['CHOT'] = gettz('Asia/Choibalsan')              # Choibalsan Standard Time (UTC+08)
    timezones['CHST'] = gettz('Pacific/Guam')                 # Chamorro Standard Time (UTC+10)
    timezones['CHUT'] = gettz('Pacific/Chuuk')                # Chuuk Time (UTC+10)
    timezones['CIST'] = gettz('Etc/GMT-8')                    # Clipperton Island Standard Time (UTC−08)
    timezones['CIT'] = gettz('Asia/Makassar')                 # Central Indonesia Time (UTC+08)
    timezones['CKT'] = gettz('Pacific/Rarotonga')             # Cook Island Time (UTC−10)
    timezones['CLST'] = gettz('America/Santiago')             # Chile Summer Time (UTC−03)
    timezones['CLT'] = gettz('America/Santiago')              # Chile Standard Time (UTC−04)
    timezones['COST'] = gettz('America/Bogota')               # Colombia Summer Time (UTC−04)
    timezones['COT'] = gettz('America/Bogota')                # Colombia Time (UTC−05)
    timezones['CST'] = gettz('America/Chicago')               # Central Standard Time (North America) (UTC−06)
    timezones['CT'] = gettz('Asia/Chongqing')                 # China time (UTC+08)
    timezones['CVT'] = gettz('Atlantic/Cape_Verde')           # Cape Verde Time (UTC−01)
    timezones['CXT'] = gettz('Indian/Christmas')              # Christmas Island Time (UTC+07)
    timezones['DAVT'] = gettz('Antarctica/Davis')             # Davis Time (UTC+07)
    timezones['DDUT'] = gettz('Antarctica/DumontDUrville')    # Dumont d'Urville Time (UTC+10)
    timezones['DFT'] = gettz('Europe/Berlin')                 # AIX equivalent of Central European Time (UTC+01)
    timezones['EASST'] = gettz('Chile/EasterIsland')          # Easter Island Summer Time (UTC−05)
    timezones['EAST'] = gettz('Chile/EasterIsland')           # Easter Island Standard Time (UTC−06)
    timezones['EAT'] = gettz('Africa/Mogadishu')              # East Africa Time (UTC+03)
    timezones['ECT'] = gettz('America/Guayaquil')             # Ecuador Time (UTC−05)
    timezones['EDT'] = gettz('America/New_York')              # Eastern Daylight Time (North America) (UTC−04)
    timezones['EEST'] = gettz('Europe/Bucharest')             # Eastern European Summer Time (UTC+03)
    timezones['EET'] = gettz('Europe/Bucharest')              # Eastern European Time (UTC+02)
    timezones['EGST'] = gettz('America/Scoresbysund')         # Eastern Greenland Summer Time (UTC±00)
    timezones['EGT'] = gettz('America/Scoresbysund')          # Eastern Greenland Time (UTC−01)
    timezones['EIT'] = gettz('Asia/Jayapura')                 # Eastern Indonesian Time (UTC+09)
    timezones['EST'] = gettz('America/New_York')              # Eastern Standard Time (North America) (UTC−05)
    timezones['FET'] = gettz('Europe/Minsk')                  # Further-eastern European Time (UTC+03)
    timezones['FJT'] = gettz('Pacific/Fiji')                  # Fiji Time (UTC+12)
    timezones['FKST'] = gettz('Atlantic/Stanley')             # Falkland Islands Summer Time (UTC−03)
    timezones['FKT'] = gettz('Atlantic/Stanley')              # Falkland Islands Time (UTC−04)
    timezones['FNT'] = gettz('Brazil/DeNoronha')              # Fernando de Noronha Time (UTC−02)
    timezones['GALT'] = gettz('Pacific/Galapagos')            # Galapagos Time (UTC−06)
    timezones['GAMT'] = gettz('Pacific/Gambier')              # Gambier Islands (UTC−09)
    timezones['GET'] = gettz('Asia/Tbilisi')                  # Georgia Standard Time (UTC+04)
    timezones['GFT'] = gettz('America/Cayenne')               # French Guiana Time (UTC−03)
    timezones['GILT'] = gettz('Pacific/Tarawa')               # Gilbert Island Time (UTC+12)
    timezones['GIT'] = gettz('Pacific/Gambier')               # Gambier Island Time (UTC−09)
    timezones['GMT'] = gettz('GMT')                           # Greenwich Mean Time (UTC±00)
    timezones['GST'] = gettz('Asia/Muscat')                   # Gulf Standard Time (UTC+04)
    timezones['GYT'] = gettz('America/Guyana')                # Guyana Time (UTC−04)
    timezones['HADT'] = gettz('Pacific/Honolulu')             # Hawaii-Aleutian Daylight Time (UTC−09)
    timezones['HAEC'] = gettz('Europe/Paris')                 # Heure Avancée d'Europe Centrale (CEST) (UTC+02)
    timezones['HAST'] = gettz('Pacific/Honolulu')             # Hawaii-Aleutian Standard Time (UTC−10)
    timezones['HKT'] = gettz('Asia/Hong_Kong')                # Hong Kong Time (UTC+08)
    timezones['HMT'] = gettz('Indian/Kerguelen')              # Heard and McDonald Islands Time (UTC+05)
    timezones['HOVST'] = gettz('Asia/Hovd')                   # Khovd Summer Time (UTC+08)
    timezones['HOVT'] = gettz('Asia/Hovd')                    # Khovd Standard Time (UTC+07)
    timezones['ICT'] = gettz('Asia/Ho_Chi_Minh')              # Indochina Time (UTC+07)
    timezones['IDT'] = gettz('Asia/Jerusalem')                # Israel Daylight Time (UTC+03)
    timezones['IOT'] = gettz('Etc/GMT+3')                     # Indian Ocean Time (UTC+03)
    timezones['IRDT'] = gettz('Asia/Tehran')                  # Iran Daylight Time (UTC+04:30)
    timezones['IRKT'] = gettz('Asia/Irkutsk')                 # Irkutsk Time (UTC+08)
    timezones['IRST'] = gettz('Asia/Tehran')                  # Iran Standard Time (UTC+03:30)
    timezones['IST'] = gettz('Asia/Kolkata')                  # Indian Standard Time (UTC+05:30)
    timezones['JST'] = gettz('Asia/Tokyo')                    # Japan Standard Time (UTC+09)
    timezones['KGT'] = gettz('Asia/Bishkek')                  # Kyrgyzstan time (UTC+06)
    timezones['KOST'] = gettz('Pacific/Kosrae')               # Kosrae Time (UTC+11)
    timezones['KRAT'] = gettz('Asia/Krasnoyarsk')             # Krasnoyarsk Time (UTC+07)
    timezones['KST'] = gettz('Asia/Seoul')                    # Korea Standard Time (UTC+09)
    timezones['LHST'] = gettz('Australia/Lord_Howe')          # Lord Howe Standard Time (UTC+10:30)
    timezones['LINT'] = gettz('Pacific/Kiritimati')           # Line Islands Time (UTC+14)
    timezones['MAGT'] = gettz('Asia/Magadan')                 # Magadan Time (UTC+12)
    timezones['MART'] = gettz('Pacific/Marquesas')            # Marquesas Islands Time (UTC−09:30)
    timezones['MAWT'] = gettz('Antarctica/Mawson')            # Mawson Station Time (UTC+05)
    timezones['MDT'] = gettz('America/Denver')                # Mountain Daylight Time (North America) (UTC−06)
    timezones['MEST'] = gettz('Europe/Paris')                 # Middle European Summer Time Same zone as CEST (UTC+02)
    timezones['MET'] = gettz('Europe/Berlin')                 # Middle European Time Same zone as CET (UTC+01)
    timezones['MHT'] = gettz('Pacific/Kwajalein')             # Marshall Islands (UTC+12)
    timezones['MIST'] = gettz('Antarctica/Macquarie')         # Macquarie Island Station Time (UTC+11)
    timezones['MIT'] = gettz('Pacific/Marquesas')             # Marquesas Islands Time (UTC−09:30)
    timezones['MMT'] = gettz('Asia/Rangoon')                  # Myanmar Standard Time (UTC+06:30)
    timezones['MSK'] = gettz('Europe/Moscow')                 # Moscow Time (UTC+03)
    timezones['MST'] = gettz('America/Denver')                # Mountain Standard Time (North America) (UTC−07)
    timezones['MUT'] = gettz('Indian/Mauritius')              # Mauritius Time (UTC+04)
    timezones['MVT'] = gettz('Indian/Maldives')               # Maldives Time (UTC+05)
    timezones['MYT'] = gettz('Asia/Kuching')                  # Malaysia Time (UTC+08)
    timezones['NCT'] = gettz('Pacific/Noumea')                # New Caledonia Time (UTC+11)
    timezones['NDT'] = gettz('Canada/Newfoundland')           # Newfoundland Daylight Time (UTC−02:30)
    timezones['NFT'] = gettz('Pacific/Norfolk')               # Norfolk Time (UTC+11)
    timezones['NPT'] = gettz('Asia/Kathmandu')                # Nepal Time (UTC+05:45)
    timezones['NST'] = gettz('Canada/Newfoundland')           # Newfoundland Standard Time (UTC−03:30)
    timezones['NT'] = gettz('Canada/Newfoundland')            # Newfoundland Time (UTC−03:30)
    timezones['NUT'] = gettz('Pacific/Niue')                  # Niue Time (UTC−11)
    timezones['NZDT'] = gettz('Pacific/Auckland')             # New Zealand Daylight Time (UTC+13)
    timezones['NZST'] = gettz('Pacific/Auckland')             # New Zealand Standard Time (UTC+12)
    timezones['OMST'] = gettz('Asia/Omsk')                    # Omsk Time (UTC+06)
    timezones['ORAT'] = gettz('Asia/Oral')                    # Oral Time (UTC+05)
    timezones['PDT'] = gettz('America/Los_Angeles')           # Pacific Daylight Time (North America) (UTC−07)
    timezones['PET'] = gettz('America/Lima')                  # Peru Time (UTC−05)
    timezones['PETT'] = gettz('Asia/Kamchatka')               # Kamchatka Time (UTC+12)
    timezones['PGT'] = gettz('Pacific/Port_Moresby')          # Papua New Guinea Time (UTC+10)
    timezones['PHOT'] = gettz('Pacific/Enderbury')            # Phoenix Island Time (UTC+13)
    timezones['PKT'] = gettz('Asia/Karachi')                  # Pakistan Standard Time (UTC+05)
    timezones['PMDT'] = gettz('America/Miquelon')             # Saint Pierre and Miquelon Daylight time (UTC−02)
    timezones['PMST'] = gettz('America/Miquelon')             # Saint Pierre and Miquelon Standard Time (UTC−03)
    timezones['PONT'] = gettz('Pacific/Pohnpei')              # Pohnpei Standard Time (UTC+11)
    timezones['PST'] = gettz('America/Los_Angeles')           # Pacific Standard Time (North America) (UTC−08)
    timezones['PYST'] = gettz('America/Asuncion')             # Paraguay Summer Time (South America)[7] (UTC−03)
    timezones['PYT'] = gettz('America/Asuncion')              # Paraguay Time (South America)[8] (UTC−04)
    timezones['RET'] = gettz('Indian/Reunion')                # Réunion Time (UTC+04)
    timezones['ROTT'] = gettz('Antarctica/Rothera')           # Rothera Research Station Time (UTC−03)
    timezones['SAKT'] = gettz('Asia/Vladivostok')             # Sakhalin Island time (UTC+11)
    timezones['SAMT'] = gettz('Europe/Samara')                # Samara Time (UTC+04)
    timezones['SAST'] = gettz('Africa/Johannesburg')          # South African Standard Time (UTC+02)
    timezones['SBT'] = gettz('Pacific/Guadalcanal')           # Solomon Islands Time (UTC+11)
    timezones['SCT'] = gettz('Indian/Mahe')                   # Seychelles Time (UTC+04)
    timezones['SGT'] = gettz('Asia/Singapore')                # Singapore Time (UTC+08)
    timezones['SLST'] = gettz('Asia/Colombo')                 # Sri Lanka Standard Time (UTC+05:30)
    timezones['SRET'] = gettz('Asia/Srednekolymsk')           # Srednekolymsk Time (UTC+11)
    timezones['SRT'] = gettz('America/Paramaribo')            # Suriname Time (UTC−03)
    timezones['SST'] = gettz('Asia/Singapore')                # Singapore Standard Time (UTC+08)
    timezones['SYOT'] = gettz('Antarctica/Syowa')             # Showa Station Time (UTC+03)
    timezones['TAHT'] = gettz('Pacific/Tahiti')               # Tahiti Time (UTC−10)
    timezones['TFT'] = gettz('Indian/Kerguelen')              # Indian/Kerguelen (UTC+05)
    timezones['THA'] = gettz('Asia/Bangkok')                  # Thailand Standard Time (UTC+07)
    timezones['TJT'] = gettz('Asia/Dushanbe')                 # Tajikistan Time (UTC+05)
    timezones['TKT'] = gettz('Pacific/Fakaofo')               # Tokelau Time (UTC+13)
    timezones['TLT'] = gettz('Asia/Dili')                     # Timor Leste Time (UTC+09)
    timezones['TMT'] = gettz('Asia/Ashgabat')                 # Turkmenistan Time (UTC+05)
    timezones['TOT'] = gettz('Pacific/Tongatapu')             # Tonga Time (UTC+13)
    timezones['TVT'] = gettz('Pacific/Funafuti')              # Tuvalu Time (UTC+12)
    timezones['ULAST'] = gettz('Asia/Ulan_Bator')             # Ulaanbaatar Summer Time (UTC+09)
    timezones['ULAT'] = gettz('Asia/Ulan_Bator')              # Ulaanbaatar Standard Time (UTC+08)
    timezones['USZ1'] = gettz('Europe/Kaliningrad')           # Kaliningrad Time (UTC+02)
    timezones['UTC'] = gettz('UTC')                           # Coordinated Universal Time (UTC±00)
    timezones['UYST'] = gettz('America/Montevideo')           # Uruguay Summer Time (UTC−02)
    timezones['UYT'] = gettz('America/Montevideo')            # Uruguay Standard Time (UTC−03)
    timezones['UZT'] = gettz('Asia/Tashkent')                 # Uzbekistan Time (UTC+05)
    timezones['VET'] = gettz('America/Caracas')               # Venezuelan Standard Time (UTC−04)
    timezones['VLAT'] = gettz('Asia/Vladivostok')             # Vladivostok Time (UTC+10)
    timezones['VOLT'] = gettz('Europe/Volgograd')             # Volgograd Time (UTC+04)
    timezones['VOST'] = gettz('Antarctica/Vostok')            # Vostok Station Time (UTC+06)
    timezones['VUT'] = gettz('Pacific/Efate')                 # Vanuatu Time (UTC+11)
    timezones['WAKT'] = gettz('Pacific/Wake')                 # Wake Island Time (UTC+12)
    timezones['WAST'] = gettz('Africa/Lagos')                 # West Africa Summer Time (UTC+02)
    timezones['WAT'] = gettz('Africa/Lagos')                  # West Africa Time (UTC+01)
    timezones['WEST'] = gettz('Europe/London')                # Western European Summer Time (UTC+01)
    timezones['WET'] = gettz('Europe/London')                 # Western European Time (UTC±00)
    timezones['WIT'] = gettz('Asia/Jakarta')                  # Western Indonesian Time (UTC+07)
    timezones['WST'] = gettz('Australia/Perth')               # Western Standard Time (UTC+08)
    timezones['YAKT'] = gettz('Asia/Yakutsk')                 # Yakutsk Time (UTC+09)
    timezones['YEKT'] = gettz('Asia/Yekaterinburg')           # Yekaterinburg Time (UTC+05)

    return timezones