# -*- encoding: utf-8 -*-
# Copyright (c) 2015, Savoir-faire Linux inc.  All Rights Reserved.

# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA

from __future__ import unicode_literals

from unittest import TestCase

from num2words import num2words


class Num2WordsPLTest(TestCase):
    def test_cardinal(self):
        self.assertEqual(num2words(100, lang='pl'), "sto")
        self.assertEqual(num2words(101, lang='pl'), "sto jeden")
        self.assertEqual(num2words(110, lang='pl'), "sto dziesięć")
        self.assertEqual(num2words(115, lang='pl'), "sto piętnaście")
        self.assertEqual(num2words(123, lang='pl'), "sto dwadzieścia trzy")
        self.assertEqual(num2words(1000, lang='pl'), "tysiąc")
        self.assertEqual(num2words(1001, lang='pl'), "tysiąc jeden")
        self.assertEqual(num2words(2012, lang='pl'), "dwa tysiące dwanaście")
        self.assertEqual(
            num2words(12519.85, lang='pl'),
            "dwanaście tysięcy pięćset dziewiętnaście przecinek "
            "osiemdziesiąt pięć"
        )
        self.assertEqual(
            num2words(123.50, lang='pl'),
            "sto dwadzieścia trzy przecinek pięć"
        )
        self.assertEqual(
            num2words(1234567890, lang='pl'),
            "miliard dwieście trzydzieści cztery miliony pięćset "
            "sześćdziesiąt siedem tysięcy osiemset dziewięćdzisiąt"
        )
        self.assertEqual(
            num2words(215461407892039002157189883901676, lang='pl'),
            "dwieście piętnaście kwintylionów czterysta sześćdziesiąt jeden "
            "kwadryliardów czterysta siedem kwadrylionów osiemset "
            "dziewięćdzisiąt dwa tryliardy trzydzieści dziewięć trylionów "
            "dwa biliardy sto pięćdziesiąt siedem bilionów sto osiemdziesiąt "
            "dziewięć miliardów osiemset osiemdziesiąt trzy miliony "
            "dziewęćset jeden tysięcy sześćset siedemdziesiąt sześć"
        )
        self.assertEqual(
            num2words(719094234693663034822824384220291, lang='pl'),
            "siedemset dziewiętnaście kwintylionów dziewięćdzisiąt cztery "
            "kwadryliardy dwieście trzydzieści cztery kwadryliony sześćset "
            "dziewięćdzisiąt trzy tryliardy sześćset sześćdziesiąt trzy "
            "tryliony trzydzieści cztery biliardy osiemset dwadzieścia dwa "
            "biliony osiemset dwadzieścia cztery miliardy trzysta "
            "osiemdziesiąt cztery miliony dwieście dwadzieścia "
            "tysięcy dwieście dziewięćdzisiąt jeden"
        )

    def test_to_ordinal(self):
        # @TODO: implement to_ordinal
        with self.assertRaises(NotImplementedError):
            num2words(1, lang='pl', to='ordinal')

    def test_currency(self):
        self.assertEqual(
            num2words(1.0, lang='pl', to='currency', currency='EUR'),
            "jeden euro, zero centów")
        self.assertEqual(
            num2words(1.0, lang='pl', to='currency', currency='PLN'),
            "jeden złoty, zero groszy")
        self.assertEqual(
            num2words(1234.56, lang='pl', to='currency', currency='EUR'),
            "tysiąc dwieście trzydzieści cztery euro, pięćdziesiąt sześć "
            "centów"
        )
        self.assertEqual(
            num2words(1234.56, lang='pl', to='currency', currency='PLN'),
            "tysiąc dwieście trzydzieści cztery złote, pięćdziesiąt sześć "
            "groszy"
        )
        self.assertEqual(
            num2words(10111, lang='pl', to='currency', currency='EUR',
                      seperator=' i'),
            "sto jeden euro i jedenaście centów"
        )
        self.assertEqual(
            num2words(10121, lang='pl', to='currency', currency='PLN',
                      seperator=' i'),
            "sto jeden złotych i dwadzieścia jeden groszy"
        )
        self.assertEqual(
            num2words(-1251985, lang='pl', to='currency', cents=False),
            "minus dwanaście tysięcy pięćset dziewiętnaście euro, 85 centów"
        )
        self.assertEqual(
            num2words(123.50, lang='pl', to='currency', currency='PLN',
                      seperator=' i'),
            "sto dwadzieścia trzy złote i pięćdziesiąt groszy"
        )
        self.assertEqual(
            num2words(1950, lang='pl', to='currency', cents=False),
            "dziewiętnaście euro, 50 centów"
        )
