"""Currencies
"""
from waeup.ikoba.interfaces import MessageFactory as _
from waeup.ikoba.interfaces import SimpleIkobaVocabulary

#: Currencies according to ISO 4217
#:
#: Compiled from:
#:   http://www.currency-iso.org/dam/downloads/table_a1.xml
#: Entries without decimal units (such as funds or not officially
#: traded currencies) were removed.
#:
#: Data published: 2014-08-15
#:
#: Keys are the currency codes (as given by ISO)
#: Entries have four items:
#:   0: Authority maintaining the currency (normally a country)
#:   1: Name of currency
#:   2: Number of decimals after decimal separator
#:   3: Currency nuber in ISO listing
#:
ISO_4217_CURRENCIES = {
    'AED': ('UNITED ARAB EMIRATES', _('UAE Dirham'), 2, '784'),
    'AFN': ('AFGHANISTAN', _('Afghani'), 2, '971'),
    'ALL': ('ALBANIA', _('Lek'), 2, '008'),
    'AMD': ('ARMENIA', _('Armenian Dram'), 2, '051'),
    'ANG': ('SINT MAARTEN (DUTCH PART)',
            _('Netherlands Antillean Guilder'),
            2,
            '532'),
    'AOA': ('ANGOLA', _('Kwanza'), 2, '973'),
    'ARS': ('ARGENTINA', _('Argentine Peso'), 2, '032'),
    'AUD': ('TUVALU', _('Australian Dollar'), 2, '036'),
    'AWG': ('ARUBA', _('Aruban Florin'), 2, '533'),
    'AZN': ('AZERBAIJAN', _('Azerbaijanian Manat'), 2, '944'),
    'BAM': ('BOSNIA AND HERZEGOVINA', _('Convertible Mark'), 2, '977'),
    'BBD': ('BARBADOS', _('Barbados Dollar'), 2, '052'),
    'BDT': ('BANGLADESH', _('Taka'), 2, '050'),
    'BGN': ('BULGARIA', _('Bulgarian Lev'), 2, '975'),
    'BHD': ('BAHRAIN', _('Bahraini Dinar'), 3, '048'),
    'BIF': ('BURUNDI', _('Burundi Franc'), 0, '108'),
    'BMD': ('BERMUDA', _('Bermudian Dollar'), 2, '060'),
    'BND': ('BRUNEI DARUSSALAM', _('Brunei Dollar'), 2, '096'),
    'BOB': ('BOLIVIA, PLURINATIONAL STATE OF', _('Boliviano'), 2, '068'),
    'BOV': ('BOLIVIA, PLURINATIONAL STATE OF', _('Mvdol'), 2, '984'),
    'BRL': ('BRAZIL', _('Brazilian Real'), 2, '986'),
    'BSD': ('BAHAMAS', _('Bahamian Dollar'), 2, '044'),
    'BTN': ('BHUTAN', _('Ngultrum'), 2, '064'),
    'BWP': ('BOTSWANA', _('Pula'), 2, '072'),
    'BYR': ('BELARUS', _('Belarussian Ruble'), 0, '974'),
    'BZD': ('BELIZE', _('Belize Dollar'), 2, '084'),
    'CAD': ('CANADA', _('Canadian Dollar'), 2, '124'),
    'CDF': ('CONGO, DEMOCRATIC REPUBLIC OF THE ',
            _('Congolese Franc'),
            2,
            '976'),
    'CHE': ('SWITZERLAND', _('WIR Euro'), 2, '947'),
    'CHF': ('SWITZERLAND', _('Swiss Franc'), 2, '756'),
    'CHW': ('SWITZERLAND', _('WIR Franc'), 2, '948'),
    'CLF': ('CHILE', _('Unidad de Fomento'), 4, '990'),
    'CLP': ('CHILE', _('Chilean Peso'), 0, '152'),
    'CNY': ('CHINA', _('Yuan Renminbi'), 2, '156'),
    'COP': ('COLOMBIA', _('Colombian Peso'), 2, '170'),
    'COU': ('COLOMBIA', _('Unidad de Valor Real'), 2, '970'),
    'CRC': ('COSTA RICA', _('Costa Rican Colon'), 2, '188'),
    'CUC': ('CUBA', _('Peso Convertible'), 2, '931'),
    'CUP': ('CUBA', _('Cuban Peso'), 2, '192'),
    'CVE': ('CABO VERDE', _('Cabo Verde Escudo'), 2, '132'),
    'CZK': ('CZECH REPUBLIC', _('Czech Koruna'), 2, '203'),
    'DJF': ('DJIBOUTI', _('Djibouti Franc'), 0, '262'),
    'DKK': ('GREENLAND', _('Danish Krone'), 2, '208'),
    'DOP': ('DOMINICAN REPUBLIC', _('Dominican Peso'), 2, '214'),
    'DZD': ('ALGERIA', _('Algerian Dinar'), 2, '012'),
    'EGP': ('EGYPT', _('Egyptian Pound'), 2, '818'),
    'ERN': ('ERITREA', _('-Nakfa'), 2, '232'),
    'ETB': ('ETHIOPIA', _('Ethiopian Birr'), 2, '230'),
    'EUR': ('SPAIN', _('Euro'), 2, '978'),
    'FJD': ('FIJI', _('Fiji Dollar'), 2, '242'),
    'FKP': ('FALKLAND ISLANDS (MALVINAS)',
            _('Falkland Islands Pound'),
            2,
            '238'),
    'GBP': ('UNITED KINGDOM', _('Pound Sterling'), 2, '826'),
    'GEL': ('GEORGIA', _('Lari'), 2, '981'),
    'GHS': ('GHANA', _('Ghana Cedi'), 2, '936'),
    'GIP': ('GIBRALTAR', _('Gibraltar Pound'), 2, '292'),
    'GMD': ('GAMBIA', _('Dalasi'), 2, '270'),
    'GNF': ('GUINEA', _('Guinea Franc'), 0, '324'),
    'GTQ': ('GUATEMALA', _('Quetzal'), 2, '320'),
    'GYD': ('GUYANA', _('Guyana Dollar'), 2, '328'),
    'HKD': ('HONG KONG', _('Hong Kong Dollar'), 2, '344'),
    'HNL': ('HONDURAS', _('Lempira'), 2, '340'),
    'HRK': ('CROATIA', _('Croatian Kuna'), 2, '191'),
    'HTG': ('HAITI', _('Gourde'), 2, '332'),
    'HUF': ('HUNGARY', _('Forint'), 2, '348'),
    'IDR': ('INDONESIA', _('Rupiah'), 2, '360'),
    'ILS': ('ISRAEL', _('New Israeli Sheqel'), 2, '376'),
    'INR': ('INDIA', _('Indian Rupee'), 2, '356'),
    'IQD': ('IRAQ', _('Iraqi Dinar'), 3, '368'),
    'IRR': ('IRAN, ISLAMIC REPUBLIC OF', _('Iranian Rial'), 2, '364'),
    'ISK': ('ICELAND', _('Iceland Krona'), 0, '352'),
    'JMD': ('JAMAICA', _('Jamaican Dollar'), 2, '388'),
    'JOD': ('JORDAN', _('Jordanian Dinar'), 3, '400'),
    'JPY': ('JAPAN', _('Yen'), 0, '392'),
    'KES': ('KENYA', _('Kenyan Shilling'), 2, '404'),
    'KGS': ('KYRGYZSTAN', _('Som'), 2, '417'),
    'KHR': ('CAMBODIA', _('Riel'), 2, '116'),
    'KMF': ('COMOROS', _('Comoro Franc'), 0, '174'),
    'KPW': (u"KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF",
            _('North Korean Won'),
            2,
            '408'),
    'KRW': ('KOREA, REPUBLIC OF', _('Won'), 0, '410'),
    'KWD': ('KUWAIT', _('Kuwaiti Dinar'), 3, '414'),
    'KYD': ('CAYMAN ISLANDS', _('Cayman Islands Dollar'), 2, '136'),
    'KZT': ('KAZAKHSTAN', _('Tenge'), 2, '398'),
    'LAK': (u"LAO PEOPLE'S DEMOCRATIC REPUBLIC", _('Kip'), 2, '418'),
    'LBP': ('LEBANON', _('Lebanese Pound'), 2, '422'),
    'LKR': ('SRI LANKA', _('Sri Lanka Rupee'), 2, '144'),
    'LRD': ('LIBERIA', _('Liberian Dollar'), 2, '430'),
    'LSL': ('LESOTHO', _('Loti'), 2, '426'),
    'LTL': ('LITHUANIA', _('Lithuanian Litas'), 2, '440'),
    'LYD': ('LIBYA', _('Libyan Dinar'), 3, '434'),
    'MAD': ('WESTERN SAHARA', _('Moroccan Dirham'), 2, '504'),
    'MDL': ('MOLDOVA, REPUBLIC OF', _('Moldovan Leu'), 2, '498'),
    'MGA': ('MADAGASCAR', _('Malagasy Ariary'), 2, '969'),
    'MKD': ('MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF',
            _('Denar'),
            2,
            '807'),
    'MMK': ('MYANMAR', _('Kyat'), 2, '104'),
    'MNT': ('MONGOLIA', _('Tugrik'), 2, '496'),
    'MOP': ('MACAO', _('Pataca'), 2, '446'),
    'MRO': ('MAURITANIA', _('Ouguiya'), 2, '478'),
    'MUR': ('MAURITIUS', _('Mauritius Rupee'), 2, '480'),
    'MVR': ('MALDIVES', _('Rufiyaa'), 2, '462'),
    'MWK': ('MALAWI', _('Kwacha'), 2, '454'),
    'MXN': ('MEXICO', _('Mexican Peso'), 2, '484'),
    'MXV': ('MEXICO', _('Mexican Unidad de Inversion (UDI)'), 2, '979'),
    'MYR': ('MALAYSIA', _('Malaysian Ringgit'), 2, '458'),
    'MZN': ('MOZAMBIQUE', _('Mozambique Metical'), 2, '943'),
    'NAD': ('NAMIBIA', _('Namibia Dollar'), 2, '516'),
    'NGN': ('NIGERIA', _('Naira'), 2, '566'),
    'NIO': ('NICARAGUA', _('Cordoba Oro'), 2, '558'),
    'NOK': ('SVALBARD AND JAN MAYEN', _('Norwegian Krone'), 2, '578'),
    'NPR': ('NEPAL', _('Nepalese Rupee'), 2, '524'),
    'NZD': ('TOKELAU', _('New Zealand Dollar'), 2, '554'),
    'OMR': ('OMAN', _('Rial Omani'), 3, '512'),
    'PAB': ('PANAMA', _('Balboa'), 2, '590'),
    'PEN': ('PERU', _('Nuevo Sol'), 2, '604'),
    'PGK': ('PAPUA NEW GUINEA', _('Kina'), 2, '598'),
    'PHP': ('PHILIPPINES', _('Philippine Peso'), 2, '608'),
    'PKR': ('PAKISTAN', _('Pakistan Rupee'), 2, '586'),
    'PLN': ('POLAND', _('Zloty'), 2, '985'),
    'PYG': ('PARAGUAY', _('Guarani'), 0, '600'),
    'QAR': ('QATAR', _('Qatari Rial'), 2, '634'),
    'RON': ('ROMANIA', _('New Romanian Leu'), 2, '946'),
    'RSD': ('SERBIA', _('Serbian Dinar'), 2, '941'),
    'RUB': ('RUSSIAN FEDERATION', _('Russian Ruble'), 2, '643'),
    'RWF': ('RWANDA', _('Rwanda Franc'), 0, '646'),
    'SAR': ('SAUDI ARABIA', _('Saudi Riyal'), 2, '682'),
    'SBD': ('SOLOMON ISLANDS', _('Solomon Islands Dollar'), 2, '090'),
    'SCR': ('SEYCHELLES', _('Seychelles Rupee'), 2, '690'),
    'SDG': ('SUDAN', _('Sudanese Pound'), 2, '938'),
    'SEK': ('SWEDEN', _('Swedish Krona'), 2, '752'),
    'SGD': ('SINGAPORE', _('Singapore Dollar'), 2, '702'),
    'SHP': ('SAINT HELENA, ASCENSION AND TRISTAN DA CUNHA',
            _('Saint Helena Pound'),
            2,
            '654'),
    'SLL': ('SIERRA LEONE', _('Leone'), 2, '694'),
    'SOS': ('SOMALIA', _('Somali Shilling'), 2, '706'),
    'SRD': ('SURINAME', _('Surinam Dollar'), 2, '968'),
    'SSP': ('SOUTH SUDAN', _('South Sudanese Pound'), 2, '728'),
    'STD': ('SAO TOME AND PRINCIPE', _('Dobra'), 2, '678'),
    'SVC': ('EL SALVADOR', _('El Salvador Colon'), 2, '222'),
    'SYP': ('SYRIAN ARAB REPUBLIC', _('Syrian Pound'), 2, '760'),
    'SZL': ('SWAZILAND', _('Lilangeni'), 2, '748'),
    'THB': ('THAILAND', _('Baht'), 2, '764'),
    'TJS': ('TAJIKISTAN', _('Somoni'), 2, '972'),
    'TMT': ('TURKMENISTAN', _('Turkmenistan New Manat'), 2, '934'),
    'TND': ('TUNISIA', _('Tunisian Dinar'), 3, '788'),
    'TOP': ('TONGA', _(u"Pa'anga"), 2, '776'),
    'TRY': ('TURKEY', _('Turkish Lira'), 2, '949'),
    'TTD': ('TRINIDAD AND TOBAGO', _('Trinidad and Tobago Dollar'), 2, '780'),
    'TWD': ('TAIWAN, PROVINCE OF CHINA', _('New Taiwan Dollar'), 2, '901'),
    'TZS': ('TANZANIA, UNITED REPUBLIC OF', _('Tanzanian Shilling'), 2, '834'),
    'UAH': ('UKRAINE', _('Hryvnia'), 2, '980'),
    'UGX': ('UGANDA', _('Uganda Shilling'), 0, '800'),
    'USD': ('VIRGIN ISLANDS (U.S.)', _('US Dollar'), 2, '840'),
    'USN': ('UNITED STATES', _('US Dollar (Next day)'), 2, '997'),
    'UYI': ('URUGUAY',
            _('Uruguay Peso en Unidades Indexadas (URUIURUI)'),
            0,
            '940'),
    'UYU': ('URUGUAY', _('Peso Uruguayo'), 2, '858'),
    'UZS': ('UZBEKISTAN', _('Uzbekistan Sum'), 2, '860'),
    'VEF': ('VENEZUELA, BOLIVARIAN REPUBLIC OF', _('Bolivar'), 2, '937'),
    'VND': ('VIET NAM', _('Dong'), 0, '704'),
    'VUV': ('VANUATU', _('Vatu'), 0, '548'),
    'WST': ('SAMOA', _('Tala'), 2, '882'),
    'XAF': ('GABON', _('CFA Franc BEAC'), 0, '950'),
    'XCD': ('SAINT VINCENT AND THE GRENADINES',
            _('East Caribbean Dollar'),
            2,
            '951'),
    'XOF': ('TOGO', _('CFA Franc BCEAO'), 0, '952'),
    'XPF': ('WALLIS AND FUTUNA', _('CFP Franc'), 0, '953'),
    'YER': ('YEMEN', _('Yemeni Rial'), 2, '886'),
    'ZAR': ('SOUTH AFRICA', _('Rand'), 2, '710'),
    'ZMW': ('ZAMBIA', _('Zambian Kwacha'), 2, '967'),
    'ZWL': ('ZIMBABWE', _('Zimbabwe Dollar'), 2, '932')
    }


def get_decimal_units(currency_code):
    """Get the number of decimals after decimal separator for a currency.

    Pass in a three-letter currency code. Returns a number.
    """
    return ISO_4217_CURRENCIES[currency_code][2]


#: A vocabulary of ISO 4217 currencies
ISO_4217_CURRENCIES_VOCAB = SimpleIkobaVocabulary(
    *[(val[1], key) for key, val in ISO_4217_CURRENCIES.items()])
